“Je veux utiliser dans mon site des données qui proviennent d'autres sites, comment je fais ?”
Problème j'ai besoin d'images de trucs mignons
Solution l'API imgur
En GROS :
#gandi-price-list th a span
$html = file_get_html('https://www.gandi.net/domain/price/info');
$elements = $html->find('#gandi-price-list th a span');
foreach ($elements as $element) {
echo substr($element->plaintext."<br>", 1);
}
Résultat de la dernière slide
application finale
design réalisé par un développeur
On trouve des données structurées sur un site tiers...
zagaz.com/evolution-prix.php
table[summary="prix des carburants en direct"] p
... et on les récupère dans notre site.
$.get(
'http://www.zagaz.com/evolution-prix.php',
function(data) {
console.log(data);
}
);
Ah ouais mais nan...
XMLHttpRequest cannot load http://www.zagaz.com/evolution-prix.php. Origin ... is not allowed by Access-Control-Allow-Origin.
Comment contourner ça sans proxy sur notre serveur ?
select from table...
)
select p from html
where url = "http://www.zagaz.com/evolution-prix.php" and (
xpath = '//table[@summary="prix des carburants en direct"]/tr/th' or
xpath = '//table[@summary="prix des carburants en direct"]/tr/td'
)
$.get("http://query.yahooapis.com/v1/public/yql?format=json&q=...",
function(data, status) {
if (status === "success") {
//nos données sont dans data.query.results
}
}
);
design aussi réalisé par un développeur
var allCards = [];
casper.start("http://hearthhead.com/cards?filter=type=4:5:7#gallery:0");
casper.then(function afterStart() {
addCurrentPageCards();
addPagesCards( this.evaluate(function getNumberOfPages(counterSelector) {
var cardsNumber = document.querySelector(counterSelector) ? document.querySelector(counterSelector).innerHTML*1 : null;
return cardsNumber !== null ? Math.floor(cardsNumber/40) : 0;
}, '.listview-nav > span > b:last-child') );
});
//allCards est plein !
casper.then(function afterCards() {
saveJSON("cards.json");
saveCSV("images.csv");
});
casper.run();
function addCurrentPageCards() {
var newCards = casper.evaluate(function getCurrentCards(cardSelector) {
var cards = document.querySelectorAll(cardSelector);
return Array.prototype.map.call(cards, function(element) {
return {
name: (element.querySelector('.screenshot-caption span span') ? element.querySelector('.screenshot-caption span span').innerHTML : null),
image: (element.querySelector('img') ? element.querySelector('img').src : null)
};
});
}, '.listview-mode-tiled td[align=center]');
allCards = allCards.concat(newCards);
}
function addPagesCards(numberOfPages) {
var currentNav = casper.evaluate(function(selector) {
return document.querySelector(selector) ? document.querySelector(selector).innerHTML : null;
}, '.listview-nav');
_(numberOfPages).times(function() {
casper.thenClick('.listview-nav > span + a');
casper.then(function afterNewList() {
addCurrentPageCards();
});
});
}
/
par Emmanuel @Leimina - Human Talks Angers 11/2013
http://manu.habite.la/scrap
#