2013-10-02 9 views
6

sto usando YQL per andare a prendere un po 'di pagine, alcune delle quali potrebbero essere non in linea (ovviamente io non so quali). Sto usando questa query:Tornando gli URL durante il caricamento di più URL con YQL

SELECT * FROM html WHERE url IN ("http://www.whooma.net", "http://www.dfdsfsdgsfagdffgd.com", "http://www.cnn.com") 

Dove il primo e l'ultimo sono siti reali, mentre il secondo ovviamente non esiste. Due risultati vengono effettivamente restituiti ma l'URL da cui sono stati caricati non viene visualizzato da nessuna parte. Quindi quale sarebbe il modo di scoprire quale pagina html appartiene a quale URL, se non tutte le pagine della query sono caricate?

+0

Non capisco. "* ma l'URL da dove sono stati caricati non appare da nessuna parte *" ti aspetti il ​​codice sopra per farlo? "* scopri quale pagina html appartiene a quale URL *" eing ??? – Oriol

+0

Pensavo fosse chiaro, scusa! Lascia che te lo spieghi di nuovo. Carico un sacco di url, alcuni vengono caricati, quindi gli url caricati vengono inseriti in un array e inviati a me. Il problema è: non ho alcun suggerimento su quale URL ho chiesto fa corrispondere ogni elemento dell'array. Quindi, invece del solo codice, avrei bisogno di tornare coppie di (url, dati) in modo da sapere quali dati corrispondono a quale URL e quali URL non sono stati caricati. –

risposta

3

Purtroppo, non so un modo in cui è possibile ottenere una chiave => coppia di valori nella risposta in cui chiave è l'url e il valore di essere la risposta html. Ma, si può provare la seguente query e vedere se soddisfa il vostro caso d'uso:

select * from yql.query.multi where queries="select * from html where url='http://www.whooma.net';select * from feed where url='http://www.dfdsfsdgsfagdffgd.com';select * from html where url='http://www.cnn.com'" 

Prova ora here. Che cosa si può fare è prima di sparare la query, mantenere l'ordine in una matrice della url nel queries in questo modo ['http://www.whooma.net','http://www.dfdsfsdgsfagdffgd.com','http://www.cnn.com']. Possiamo chiamare questo array A Quando si esegue l'iterazione sulla risposta dalla query YQL, l'url che non esiste restituirà un valore null. Una risposta campione dalla query precedente:

<results> 
    <results> 
    // Response from select * from html where url='http://www.whooma.net'. This should be some html 
    </results> 
    <results> 
    // Response from select * from feed where url='http://www.dfdsfsdgsfagdffgd.com'. This should be null. 
    </results> 
    <results> 
    // select * from html where url='http://www.cnn.com'. This should also be some html 
    </results> 
</results> 

Quindi, in conclusione, è possibile iterare su array di A e risposta da YQL. Il primo elemento dell'array A dovrebbe corrispondere al primo elemento results (risultati interni) di tale risposta YQL. io stai creando una hashmap da due array. So che la risposta è lunga ma penso che fosse necessaria. Fammi sapere se c'è qualche confusione.

1

È possibile capire quali URL non vengono caricati utilizzando il flag di diagnostica YQL. Il flag di diagnostica farà sì che la risposta includa una proprietà diagnostics con un array url che indica se sono stati trovati i server corrispondenti. Presumibilmente, una volta eliminati gli urls che non sono stati caricati, le pagine dei risultati corrisponderanno agli url rimanenti.

Problemi correlati