Просмотр полной версии : Flash AS2 Парсер
Здравствуйте, ищу в инете третий день, не могу найти исходника на флеш парсер HTML страниц.
В частности есть флеш радио плеер, нужно чтобы со страницы айскаста вытягивалось название песни.
То есть берём код HTML страницы, я так понял оператором GetURL, ищем в нём "Current Song:" и после найденного следующую строчку присваиваем переменной. Ещё нужно как-то теги отсечь...
</tr>
<tr>
<td>Stream Genre:</td>
<td class="streamdata">Various</td>
</tr>
<tr>
<td>Stream URL:</td>
<td class="streamdata"><a target="_blank" href="http://www.audiorealm.com">http://www.audiorealm.com</a></td>
</tr>
<tr>
<td>Current Song:</td>
<td class="streamdata">Queen - Boghemian Phapsody</td>
</tr>
</table>
</div>
<div class="roundbottom"><img src="/corner_bottomleft.jpg" class="corner" style="display: none"></div>
</div>
<br><br>
Помогите пожалуйста, очень хочется научиться программировать на as для флеша, но когда пытаюсь изучать, ничего не понимаю и спросить не у кого...
Оператором GetURL вы страницу не "возьмете". Смотрите в сторону класса LoadVars.
Через indexOf ищем строку 'Current Song\r\n<td class="streamdata">' получаем индекс символа, к которому добавляем еще длину искомой строки. С помощью substr отрезаем весь текст до начала названия. Потом ищем </td> и отрезаем все что правее.
Спасибо за подсказки. Было бы не плохо побольше кода написать, может быть есть подобный код уже написанный, который я мог бы адаптировать для своих целей?..
По сути это обычный XML.
Побольше кода..... ну.. извольте:
function LoadDat(){
LD.desc.text = "Загрузка уровней"
if ( local() ){
urlxml = "levels.xml"
} else {
urlxml = _level0.appUrl+"levels.xml?hash="+random(9999999)+"&CRC="+random(9999999)
}
STAT.text += "\nLoading "+"LEVELS"
var prof:XML = new XML();
prof.ignoreWhite = true;
prof.load(urlxml);
ShowLoad( prof, desc )
prof.onLoad = function(success) {
if (success)
{
if (prof.status != 0){
var errorMessage:String;
switch (prof.status)
{
case -2 :
errorMessage = "A CDATA section was not properly terminated.";
break;
case -3 :
errorMessage = "The XML declaration was not properly terminated.";
break;
case -4 :
errorMessage = "The DOCTYPE declaration was not properly terminated.";
break;
case -5 :
errorMessage = "A comment was not properly terminated.";
break;
case -6 :
errorMessage = "An XML element was malformed.";
break;
case -7 :
errorMessage = "Out of memory.";
break;
case -8 :
errorMessage = "An attribute value was not properly terminated.";
break;
case -9 :
errorMessage = "A start-tag was not matched with an end-tag.";
break;
case -10 :
errorMessage = "An end-tag was encountered without a matching start-tag.";
break;
default :
errorMessage = "An unknown error has occurred.";
break;
}
STAT.text += "\nXML Structure Error:\n"+prof.status+" - "+errorMessage
STAT._visible = true
}
else
{
var node = prof.firstChild
trace("XML LOAD NODES:"+node.childNodes.length+" NodeName:"+node.nodeName)
for ( var T in node.attributes){
trace("OPTIONS."+T+"="+node.attributes[T])
OPTIONS[T] = node.attributes[T]
}
for ( var i=0; i<node.childNodes.length; i++){
var nodeC = node.childNodes[i]
switch ( nodeC.nodeName )
{
case "LEVEL":
var TR = new Object()
TR.POINTS = new Array()
TR.LINES = new Array()
TR.OBJECTS = new Array()
for ( var T in nodeC.attributes){ // Разобрали базовый узел тутора
TR[T] = nodeC.attributes[T]
trace(" addTutor att:"+T+"="+nodeC.attributes[T])
}
//trace( "-------------"+nodeC.nodeName+" id="+ TR.id)
for ( var j=0; j<nodeC.childNodes.length; j++){
var nodeL = nodeC.childNodes[j]
//trace( nodeL.nodeName )
switch( nodeL.nodeName ){
case "point":
var cfgObj = new Object()
for ( var T in nodeL.attributes){
cfgObj[T] = nodeL.attributes[T]
//trace( " "+T +"="+ nodeL.attributes[T])
}
TR.POINTS[Number(cfgObj.id)] = cfgObj
break;
case "line":
var cfgObj = new Object()
for ( var T in nodeL.attributes){
cfgObj[T] = nodeL.attributes[T]
//trace( " "+T +"="+ nodeL.attributes[T])
}
TR.LINES.push( cfgObj )
break;
case "object":
var cfgObj = new Object()
for ( var T in nodeL.attributes){
cfgObj[T] = nodeL.attributes[T]
//trace( " "+T +"="+ nodeL.attributes[T])
}
TR.OBJECTS.push( cfgObj )
break;
}
}
LEVELSCFG[Number(TR.id)] = TR
trace( TR.id+" -- "+TR.POINTS.length +" / "+TR.LINES.length+" / "+TR.OBJECTS.length )
break;
}
}
STAT.text += "...OK"
LD.removeMovieClip();
LDR.removeMovieClip();
_root.gotoAndPlay(2)
}
}
else{
STAT.text += "\nXML LOAD ERROR: "+urlxml
STAT._visible = true
}
}
}
Добавлено через 22 минуты
К слову сказать, в общем случае вы Html не сможете прочитать, если crossdomain.xml этого не предполагает.
Локально работать будет, удаленно может перестать.
Но могу ошибаться.
Но будьте готовы.
Попробуйте сначала его просто оттуда загрузить.
Может быть и париться далее не стоит.
Хотя, о5-таки, можно вывернутсья через рнр....
По сути это обычный XML.В xml все теги должны быть закрыты, в отличии от html. Например, в этом html есть теги <br>, об которые парсер xml споткнется.
Хм.... Флэш он... ХМЛ ест как бы.... Сквозь пальцы. Либо схомячит, либо нет.
Я парсил ответ ВК со списком приложений. А уж кривее чем у ВК ни штмл, ни хмл, ни джсона нету.....
Надо произвести эксперимент и точно убедитсья.
Дарк - просто поверь. Нtml кривее. )
Скучно спорить с АС3-шниками... вы все такие закомплексованные....
Скучно спорить с АС3-шниками... вы все такие закомплексованные....
Пока что комплекс у тебя - боязнь проверить на практике, вместо того споришь и флейм разводишь.
По сути это обычный XML.
Побольше кода..... ну.. извольте:
function LoadDat(){
LD.desc.text = "Загрузка уровней"
if ( local() ){
urlxml = "levels.xml"
} else {
urlxml = _level0.appUrl+"levels.xml?hash="+random(9999999)+"&CRC="+random(9999999)
}
STAT.text += "\nLoading "+"LEVELS"
var prof:XML = new XML();
prof.ignoreWhite = true;
prof.load(urlxml);
ShowLoad( prof, desc )
prof.onLoad = function(success) {
if (success)
{
if (prof.status != 0){
var errorMessage:String;
switch (prof.status)
{
case -2 :
errorMessage = "A CDATA section was not properly terminated.";
break;
case -3 :
errorMessage = "The XML declaration was not properly terminated.";
break;
case -4 :
errorMessage = "The DOCTYPE declaration was not properly terminated.";
break;
case -5 :
errorMessage = "A comment was not properly terminated.";
break;
case -6 :
errorMessage = "An XML element was malformed.";
break;
case -7 :
errorMessage = "Out of memory.";
break;
case -8 :
errorMessage = "An attribute value was not properly terminated.";
break;
case -9 :
errorMessage = "A start-tag was not matched with an end-tag.";
break;
case -10 :
errorMessage = "An end-tag was encountered without a matching start-tag.";
break;
default :
errorMessage = "An unknown error has occurred.";
break;
}
STAT.text += "\nXML Structure Error:\n"+prof.status+" - "+errorMessage
STAT._visible = true
}
else
{
var node = prof.firstChild
trace("XML LOAD NODES:"+node.childNodes.length+" NodeName:"+node.nodeName)
for ( var T in node.attributes){
trace("OPTIONS."+T+"="+node.attributes[T])
OPTIONS[T] = node.attributes[T]
}
for ( var i=0; i<node.childNodes.length; i++){
var nodeC = node.childNodes[i]
switch ( nodeC.nodeName )
{
case "LEVEL":
var TR = new Object()
TR.POINTS = new Array()
TR.LINES = new Array()
TR.OBJECTS = new Array()
for ( var T in nodeC.attributes){ // Разобрали базовый узел тутора
TR[T] = nodeC.attributes[T]
trace(" addTutor att:"+T+"="+nodeC.attributes[T])
}
//trace( "-------------"+nodeC.nodeName+" id="+ TR.id)
for ( var j=0; j<nodeC.childNodes.length; j++){
var nodeL = nodeC.childNodes[j]
//trace( nodeL.nodeName )
switch( nodeL.nodeName ){
case "point":
var cfgObj = new Object()
for ( var T in nodeL.attributes){
cfgObj[T] = nodeL.attributes[T]
//trace( " "+T +"="+ nodeL.attributes[T])
}
TR.POINTS[Number(cfgObj.id)] = cfgObj
break;
case "line":
var cfgObj = new Object()
for ( var T in nodeL.attributes){
cfgObj[T] = nodeL.attributes[T]
//trace( " "+T +"="+ nodeL.attributes[T])
}
TR.LINES.push( cfgObj )
break;
case "object":
var cfgObj = new Object()
for ( var T in nodeL.attributes){
cfgObj[T] = nodeL.attributes[T]
//trace( " "+T +"="+ nodeL.attributes[T])
}
TR.OBJECTS.push( cfgObj )
break;
}
}
LEVELSCFG[Number(TR.id)] = TR
trace( TR.id+" -- "+TR.POINTS.length +" / "+TR.LINES.length+" / "+TR.OBJECTS.length )
break;
}
}
STAT.text += "...OK"
LD.removeMovieClip();
LDR.removeMovieClip();
_root.gotoAndPlay(2)
}
}
else{
STAT.text += "\nXML LOAD ERROR: "+urlxml
STAT._visible = true
}
}
}
Добавлено через 22 минуты
К слову сказать, в общем случае вы Html не сможете прочитать, если crossdomain.xml этого не предполагает.
Локально работать будет, удаленно может перестать.
Но могу ошибаться.
Но будьте готовы.
Попробуйте сначала его просто оттуда загрузить.
Может быть и париться далее не стоит.
Хотя, о5-таки, можно вывернутсья через рнр....
Вынос мозга, я ничего не понимаю, но спасибо за помощь. Может быть что-то из этого удастся применить...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.