2009-10-05 10 views
2

Est-il possible de lire les cotations mises à jour en temps réel dans this website via actionscript3, sans avoir à recharger la page tout le temps, ce qui serait lourd sur le réseau. En d'autres termes, est-il possible de diffuser les données de devis directement dans actionscript3 ou éventuellement PHP depuis javascript?Lire les données de JavaScript mis à jour html

Si non, quelqu'un a-t-il une suggestion à faire pour obtenir ces citations en actionscript?

Répondre

2

ce que Theo Développant a dit ... (je suis sûr qu'il ya beaucoup plus lisse façon de le faire et je vais être dénoncé comme un hack mais il fonctionne damnit)

Je suis essentiellement juste extraire les deux premiers chiffres sous l'EUR/USD en rouge.

Voici le script php pour mettre sur votre serveur appelé getContent.php

<?php 

$handle = fopen("getVars.php", "r"); 

$contents = ''; 
    while (!feof($handle)) { 
    $contents .= fread($handle, 8192); 
} 

$vars = explode("&", $contents); 
$time = substr($vars[2], 5); 
$difference = abs(date(s)-$time); 

if($difference>5) 
{ 

    $handle = fopen("http://www.fxstreet.com/technical/currencies-glance/pair.aspx?id=EUR/USD", "r"); 

    $contents = ''; 
     while (!feof($handle)) { 
     $contents .= fread($handle, 8192); 
    } 

    $contents=trim($contents); 
    $pos1 = strpos($contents, 'lhtml_0" innerOnUpdate="att=BID" innerfilter="format_number">'); 
    $str1 = substr($contents, $pos1, 100); 
    $cur1 = substr($str1, 61, 6); 
    $pos2 = strpos($contents, 'lhtml_1" innerOnUpdate="att=ASK" innerfilter="format_number">'); 
    $str2 = substr($contents, $pos2, 100); 
    $cur2 = substr($str2, 61, 6); 

    $cachedPage = fopen("getVars.php", "w"); 
    $varString = "cur1=$cur1&cur2=$cur2&time=".date(s); 
    fwrite($cachedPage,$varString); 
    fclose($cachedPage); 
    echo "cur1=$cur1&cur2=$cur2&cached=false"; 
} 
else 
{ 
    $handle = fopen("getVars.php", "r"); 

    $contents = ''; 
     while (!feof($handle)) { 
     $contents .= fread($handle, 8192); 
    } 

    echo $contents."&cached=true"; 
} 

fclose($handle); 
?> 

Et puis le actionscript

var updateTimer:Timer = new Timer(5000); 
updateTimer.addEventListener(TimerEvent.TIMER, getQuotes); 
updateTimer.start(); 
function getQuotes(e:Event):void 
{ 
    var request:URLRequest = new URLRequest ("getContent.php");  
    var loader:URLLoader = new URLLoader (request); 
    loader.addEventListener(Event.COMPLETE, onComplete); 
    loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
    loader.load(request); 
} 

function onComplete (event:Event):void 
{ 
    var variables:URLVariables = new URLVariables(event.target.data); 
    currency1.text = variables.cur1; 
    currency2.text = variables.cur2; 
} 
var e:Event; 
getQuotes(e); 

Vous pouvez le voir en action ici ... http://www.hupcapstudios.com/getCurrency.swf

La partie hack était mon analyse de la page en php. J'ai dû faire de sérieuses actions de substring. Je suis sûr que n'importe qui avec une quantité décente de capacité d'analyse pourrait écrire un code plus propre pour extraire toutes les données dont vous avez besoin.

Je pensais juste que je me balancerais dessus. Bonne chance :)

+0

C'est cool, mais je suppose que c'est une bonne idée de ne pas l'analyser à chaque requête (à moins que vous ne gériez ceci avec le cache du serveur). Imaginez un chiffre: 200 utilisateurs se connectent pendant 60 secondes, ce qui fait 2400 requêtes (inévitables) + 2400 fopen/parsing (ça fait mal). Vous pourriez faire ce dernier numéro 12 en mettant en cache le résultat (ou même moins si vous utilisez une méthode "paresseuse"). –

+0

Bon appel! Je viens de mettre à jour le php pour recharger et réécrire l'URL avec le contenu seulement si le temps entre les visites est supérieur à 5 secondes. –

1

peut-être créer un script côté serveur vérifiant le contenu du site toutes les 5 secondes environ. Le script pourrait analyser une version "mise en cache" de la "citation" que vous cherchez à récupérer. Ensuite, il suffit de demander ce contenu en cache via URLRequests à de courts intervalles de votre application flash.

Questions connexes