Я хочу просканировать несколько веб-сайтов со списком концертов, чтобы составить окончательное руководство по листингу со ссылками на исходные веб-сайты.
Многие из этих веб-сайтов не имеют API, поэтому мне приходится использовать довольно грубо скомпонованный php-скрипт, который будет извлекать нужные мне данные. (например, дата, место проведения, страна и т. д.)
На большинстве сайтов есть довольно простой в использовании каталог концертов, но на некоторых сайтах требуется вручную вводить информацию, чтобы получать «релевантные» шоу.
Чтобы обойти это, я создал цикл, который работал на основе:
page.php?id=$counter+1
Таким образом, он находит последний вставленный концерт в базу данных и продолжает получать данные для следующих 100 или около того.
НО это работает только при условии, что концерты на сайте будут продолжаться точно в числовом отношении, и, конечно же, это не так из-за отмен и т. Д.
Это оставляет меня с прекрасным
Warning: file_get_contents(http://www.domain.com/show/page.php?id=123456) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in...
Как можно создать цикл, который сможет пропустить эти ошибки и продолжить работу, а не просто сидеть на них?
Ниже представлен весь код (Лимит +5 на данный момент для тестирования)
include_once('simple_html_dom.php');
$cntqry = mysql_query("SELECT * FROM `gigs_tbl` ORDER BY `counter` DESC LIMIT 1");
$cntnum = mysql_num_rows($cntqry);
if($cntnum!=0)
{
$cntget = mysql_fetch_assoc($cntqry);
$start = $cntget['counter'];
}
else {
$start = 10767799;
}
$counter = 0;
$limit = $start +5;
for($start; $start < $limit; $start++) {
$counter = $start + 1;
$target_url = "http://www.domain.com/show/page.php?id=$counter";
$html = new simple_html_dom();
$html->load_file($target_url);
foreach($html->find('div[class=vevent]') as $showrow){
$artist = strip_tags($showrow->find('h2',0));
$genre = strip_tags($html->find('span[class=genre]',0));
$venue = strip_tags($showrow->find('span[class=location]',0));
$street = strip_tags($html->find('span[itemprop=streetAddress]',0));
$locality = strip_tags($html->find('span[itemprop=addressLocality]',0));
$postcode = strip_tags($html->find('span[itemprop=postalCode]',0));
$country = strip_tags($html->find('span[itemprop=addressRegion]',0));
$originalDate = strip_tags($html->find('meta[itemprop=startDate]',0)->content);
$newDate = date("U", strtotime($originalDate));
// INSERT
mysql_query("INSERT INTO `gigs_tbl` VALUES('','$counter','$newDate','$venue','$street','$locality','$postcode','$country','$gen re','$artist','reverbnation')");
}
}
Десять виртуальных дайте пять любому, кто может догадаться, какой веб-сайт вызывает эту проблему;)