Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   FLASH поисковик (http://www.flasher.ru/forum/showthread.php?t=120930)

DrSmyrke 03.02.2009 14:06

FLASH поисковик
 
Помогите сделать поисковик на FLASH-е
Надо что бы ролик искал нужный текст на странице и отображал его в текстовом поле!
Я вю голову сломал и не знаю как делать! Люди добрые помогите чайнику!
Заранее спасибо!

Psycho Tiger 03.02.2009 18:12

А как отдавать страницу на сьедение ролику уже придумано?
Если да - то я полагаю, indexOf

scarbo 03.02.2009 18:29

Цитата:

текст на странице
на какой?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

Цитата:

Сообщение от Psycho Tiger (Сообщение 795462)
Вам не понятен алгоритм?
1) Загружаем во флешку эту страницу
2) Надо чтобы нашел и написал... то есть он не должен копировать текст со страницы, он и так заранее известен. Банальный indexOf("Например").

слушай ты можешь код флешки написать что бы он загружать какай нибудь текст например с яндекса?

qazwsx 04.02.2009 12:51

Код AS1/AS2:

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

Вот что накидал по-быстрому
Код AS1/AS2:

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 вызывается по окончании загрузки? ну, то есть если сделать проверку на число загруженных байт, тогда да

qazwsx 04.02.2009 17:03

Код AS1/AS2:

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

Цитата:

Сообщение от gloomyBrain (Сообщение 795555)
Вот что накидал по-быстрому
Код AS1/AS2:

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) ну а соль-перец по вкусу, далее делаем чего хотели с самого начала

qazwsx 05.02.2009 11:35

Зачем вообще было чтото писать после моего примера?.

P.S LoadVars.load использую загружается полностью все никаких XML не надо
P.P.S Собитию onData передается a:Object не строка и не XML :)
P.P.P.S LoadVars.load, sendAndLoad, XML.load, sendAndLoad выдают 1 и тотже результат по оканчанию загрузки

Vasyaga 05.02.2009 13:55

И еще маленькое замечание - строка:
Код AS1/AS2:

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
проверял через сайт (у них этого файла и в помине нет =))

Vasyaga 05.02.2009 15:24

Цитата:

Сообщение от gloomyBrain (Сообщение 795789)
2 Vasyaga
Самое удивительное, что работает без crossdomain.xml
проверял через сайт (у них этого файла и в помине нет =))

Такого файла нет, но по запросу http://florall.ru/crossdomain.xml он не выдаёт ошибку 404, а возвращает главную страницу сайта! Видимо парсер crossdomain.xml воспринимает ее как разрешающую доступ (может символ '*' видит ?).

Вам в любом случае придется создавать какой-то back-end на сервере хотя бы для проксирования запросов. Не говоря уже о кешировании. Да и синтакс-анализ лучше делать средствами сервера, а не во флэш, и передавать во флэш данные в удобоваримом формате.

qazwsx 05.02.2009 16:00

Цитата:

Сообщение от gloomyBrain (Сообщение 795789)
qazws, действительно, зачем? Ведь следующее что написано после вашего примера это:



У меня XML.load давал НЕ то же самое, что и LoadVars.load
2 Vasyaga
Самое удивительное, что работает без crossdomain.xml
проверял через сайт (у них этого файла и в помине нет =))

Вообщето это было написанно с коментарием твоего кода). Да и кроме того ответ на вопрос был дан, а он уже может дальше разбиратся с кодом сам, модифицировать его изменять и тд.

P.S Самое удивителньое что вы во Flash IDE проверяли? :) если да то плеер во Flash IDE Запускается как "доверенный" и может получить доступ к чему угодно(в сети).

Psycho Tiger 05.02.2009 20:56

Так то да, но ведь скорее всего флешка будет валяться в сети на странице, иначе какой от неё смысл?

2Автор: будет искать и по тегам, то есть html он найдет. Как вариант либо загрузив все "убить" все теги - самое лучшее, или идти циклом снимая по букве влево и ищя ">" и вправо ищя "<", то есть удостоверяясь, что это не тег.
Конечно, читать по букве - это самый не айс, но смысл я думаю понятен =)


Часовой пояс GMT +4, время: 22:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.