PDA

Просмотр полной версии : Flash AS2 Парсер


Nikem79
29.06.2013, 17:56
Здравствуйте, ищу в инете третий день, не могу найти исходника на флеш парсер 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>&nbsp;


Помогите пожалуйста, очень хочется научиться программировать на as для флеша, но когда пытаюсь изучать, ничего не понимаю и спросить не у кого...

NikolyA
29.06.2013, 19:52
а почему в Разделе АS3?

mooncar
29.06.2013, 20:02
Оператором GetURL вы страницу не "возьмете". Смотрите в сторону класса LoadVars.

iNils
30.06.2013, 15:42
Через indexOf ищем строку 'Current Song\r\n<td class="streamdata">' получаем индекс символа, к которому добавляем еще длину искомой строки. С помощью substr отрезаем весь текст до начала названия. Потом ищем </td> и отрезаем все что правее.

Nikem79
02.07.2013, 14:30
Спасибо за подсказки. Было бы не плохо побольше кода написать, может быть есть подобный код уже написанный, который я мог бы адаптировать для своих целей?..

dark256
02.07.2013, 23:29
По сути это обычный 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-таки, можно вывернутсья через рнр....

iNils
03.07.2013, 18:27
По сути это обычный XML.В xml все теги должны быть закрыты, в отличии от html. Например, в этом html есть теги <br>, об которые парсер xml споткнется.

dark256
03.07.2013, 20:39
Хм.... Флэш он... ХМЛ ест как бы.... Сквозь пальцы. Либо схомячит, либо нет.
Я парсил ответ ВК со списком приложений. А уж кривее чем у ВК ни штмл, ни хмл, ни джсона нету.....
Надо произвести эксперимент и точно убедитсья.

Котяра
04.07.2013, 10:15
Дарк - просто поверь. Нtml кривее. )

dark256
04.07.2013, 19:11
Скучно спорить с АС3-шниками... вы все такие закомплексованные....

iNils
04.07.2013, 19:40
Скучно спорить с АС3-шниками... вы все такие закомплексованные....
Пока что комплекс у тебя - боязнь проверить на практике, вместо того споришь и флейм разводишь.

Nikem79
09.07.2013, 17:48
По сути это обычный 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-таки, можно вывернутсья через рнр....


Вынос мозга, я ничего не понимаю, но спасибо за помощь. Может быть что-то из этого удастся применить...