Просмотр полной версии : FLASH поисковик
DrSmyrke
03.02.2009, 14:06
Помогите сделать поисковик на FLASH-е
Надо что бы ролик искал нужный текст на странице и отображал его в текстовом поле!
Я вю голову сломал и не знаю как делать! Люди добрые помогите чайнику!
Заранее спасибо!
Psycho Tiger
03.02.2009, 18:12
А как отдавать страницу на сьедение ролику уже придумано?
Если да - то я полагаю, indexOf
текст на странице
на какой?Html?txt?
gloomyBrain
03.02.2009, 18:58
2 Scarbo
А какая разница? =)
DrSmyrke
04.02.2009, 09:30
на HTML странице,
допустим мне надо что бы флеш нашел на главной странице яндекса, слово "Например" и написал бы его в своем текстовом поле!
Как это сделать я не понимаю!
Помогите чайнику!
Psycho Tiger
04.02.2009, 10:42
Вам не понятен алгоритм?
1) Загружаем во флешку эту страницу
2) Надо чтобы нашел и написал... то есть он не должен копировать текст со страницы, он и так заранее известен. Банальный indexOf("Например").
DrSmyrke
04.02.2009, 12:34
Вам не понятен алгоритм?
1) Загружаем во флешку эту страницу
2) Надо чтобы нашел и написал... то есть он не должен копировать текст со страницы, он и так заранее известен. Банальный indexOf("Например").
слушай ты можешь код флешки написать что бы он загружать какай нибудь текст например с яндекса?
var loader:LoadVars = new LoadVars();
loader.onData = onRecive;
var wordToFind:String = '';
var tField:TextField = _root.createTextField('tField', 1, 0, 0, 0, 0);
tField.autoSize = true;
tField.border = true;
function onRecive(src:String):Void
{
if(src.indexOf(wordToFind) != -1)
{
tField.text = wordToFind;
tField._x = (Stage.width - tField.textWidth)/2;
tField._y = (Stage.height - tField.textHeight)/2;
}
}
function findWord(word:String, url:String):Void
{
wordToFind = word;
loader.load(url);
}
findWord('yandex', 'http://yandex.ru');
DrSmyrke
04.02.2009, 14:09
ребят, чето не фурычит!!!
gloomyBrain
04.02.2009, 15:55
Вот что накидал по-быстрому
var lv:LoadVars= new LoadVars();
lv.onLoad=function(success:Boolean){
if(success){
trace("Здесь будет отображение в виде LoadVars")
trace(unescape(String(this)))
trace("\n\n")
}else{
trace("error loading string")
}
}
lv.load("http://google.ru")
//
// тоже самое с xml
//
var xm:XML=new XML()
xm.ignoreWhite=true
xm.onLoad = function(success:Boolean){
if(success){
trace(this)
}else{
trace("error loading xml")
}
}
xm.load("http://google.ru")
Однако, заметил, что
1) LoadVars грузит не все, а только некоторый объем(видимо есть макс. предел)
2) XML можно прочитать только ту часть, которую флеш считает xml-ем
DarkLight
04.02.2009, 16:01
2) XML можно прочитать только ту часть, которую флеш считает xml-ем
Вместо onLoad используйте onData, и сможете прочитать все
gloomyBrain
04.02.2009, 16:59
а разве onData вызывается по окончании загрузки? ну, то есть если сделать проверку на число загруженных байт, тогда да
onData = function(src:String) {}
Invoked when data has completely downloaded from the server or when an error occurs while data is downloading from a server.
Из хелпа
DrSmyrke
04.02.2009, 18:05
Вот что накидал по-быстрому
var lv:LoadVars= new LoadVars();
lv.onLoad=function(success:Boolean){
if(success){
trace("Здесь будет отображение в виде LoadVars")
trace(unescape(String(this)))
trace("\n\n")
}else{
trace("error loading string")
}
}
lv.load("http://google.ru")
//
// тоже самое с xml
//
var xm:XML=new XML()
xm.ignoreWhite=true
xm.onLoad = function(success:Boolean){
if(success){
trace(this)
}else{
trace("error loading xml")
}
}
xm.load("http://google.ru")
Однако, заметил, что
1) LoadVars грузит не все, а только некоторый объем(видимо есть макс. предел)
2) XML можно прочитать только ту часть, которую флеш считает xml-ем
Как загружать я понял, искать между тегами как будет?
gloomyBrain
04.02.2009, 18:46
Из хелпа
...да
Дыра в памяти =), почему-то считал, что это событие сродни onProgress и тп
кстати, тоже из хелпа, потому и О_о:
Whenever you receive data from the server, the data event (flash.events.DataEvent.DATA) is dispatched
В любом случае, тот же гугл возвращается не полностью (я имею ввиду что скрипты грузятся только через LoadVars - это по факту работы загрузки - а вот само тело страницы возвращается корректно только через xml)
Исходя из того, что имеем и того, что сказал DarkLight, я бы сделал так:
1) преобразовал загруженный xml (по событию onData) в строку
2) для этой строки использовал бы indexOf для нахождения интересующего нас участка (его начала и конца)
3) ну а соль-перец по вкусу, далее делаем чего хотели с самого начала
Зачем вообще было чтото писать после моего примера?.
P.S LoadVars.load использую загружается полностью все никаких XML не надо
P.P.S Собитию onData передается a:Object не строка и не XML :)
P.P.P.S LoadVars.load, sendAndLoad, XML.load, sendAndLoad выдают 1 и тотже результат по оканчанию загрузки
И еще маленькое замечание - строка:
lv.load('http://google.ru');
В браузере работать будет только в случае если в корне домена 'http://google.ru' (и любого другого, с которого Вы загружаете данные лежит файлик 'crossdomain.xml' c разрешением доступа от вашего домена (yourdomain.ru), где лежит флэшка:
<allow-access-from domain="yourdomain.ru" />
В большинстве случаев это будет недостижимо.
Есть еще один способ загрузки данных из другого домена - использовать прокси на вашем сервере, который будет забирать запросы от flash и перенаправлять их по нужному URL.
gloomyBrain
05.02.2009, 15:13
Зачем вообще было чтото писать после моего примера?
qazws, действительно, зачем? Ведь следующее что написано после вашего примера это:
Как загружать я понял, искать между тегами как будет?
LoadVars.load, sendAndLoad, XML.load, sendAndLoad выдают 1 и тотже результат по оканчанию загрузки
У меня XML.load давал НЕ то же самое, что и LoadVars.load
2 Vasyaga
Самое удивительное, что работает без crossdomain.xml
проверял через сайт (http://florall.ru/) (у них этого файла и в помине нет =))
2 Vasyaga
Самое удивительное, что работает без crossdomain.xml
проверял через сайт (http://florall.ru/) (у них этого файла и в помине нет =))
Такого файла нет, но по запросу http://florall.ru/crossdomain.xml он не выдаёт ошибку 404, а возвращает главную страницу сайта! Видимо парсер crossdomain.xml воспринимает ее как разрешающую доступ (может символ '*' видит ?).
Вам в любом случае придется создавать какой-то back-end на сервере хотя бы для проксирования запросов. Не говоря уже о кешировании. Да и синтакс-анализ лучше делать средствами сервера, а не во флэш, и передавать во флэш данные в удобоваримом формате.
qazws, действительно, зачем? Ведь следующее что написано после вашего примера это:
У меня XML.load давал НЕ то же самое, что и LoadVars.load
2 Vasyaga
Самое удивительное, что работает без crossdomain.xml
проверял через сайт (http://florall.ru/) (у них этого файла и в помине нет =))
Вообщето это было написанно с коментарием твоего кода). Да и кроме того ответ на вопрос был дан, а он уже может дальше разбиратся с кодом сам, модифицировать его изменять и тд.
P.S Самое удивителньое что вы во Flash IDE проверяли? :) если да то плеер во Flash IDE Запускается как "доверенный" и может получить доступ к чему угодно(в сети).
Psycho Tiger
05.02.2009, 20:56
Так то да, но ведь скорее всего флешка будет валяться в сети на странице, иначе какой от неё смысл?
2Автор: будет искать и по тегам, то есть html он найдет. Как вариант либо загрузив все "убить" все теги - самое лучшее, или идти циклом снимая по букве влево и ищя ">" и вправо ищя "<", то есть удостоверяясь, что это не тег.
Конечно, читать по букве - это самый не айс, но смысл я думаю понятен =)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.