Разбор Tumblr XML прерывает цикл PHP

Я создаю веб-сайт, который основывается на чтении XML, созданного Tumblr для моего фотоблога, и извлекает URL-адреса постов в блогах и URL-адреса изображений для отображения и создания ссылок.

Я написал код на PHP, который анализирует XML и создает внешние и внутренние циклы, чтобы понять, как Tumblr ограничивает максимальное количество сообщений до 50 по любому запросу. Циклы должны обрабатывать запросы, которые возвращают пакеты из 50 URL-адресов, а в последнем цикле обрабатываются только остальные.

В настоящее время в блоге 53 сообщения, поэтому в коде есть логика, которая определяет, что 2 запроса должны быть прочитаны в 2 циклах:

В обоих случаях XML загружается в переменную $ xml, а затем анализируется на предмет конкретных данных, которые собираются во внутреннем цикле. При выполнении он должен просто создать список номеров изображений, URL-адресов сообщений блога и URL-адресов изображений через весь набор циклов.

Когда я выполняю этот код, цикл всегда прерывается после анализа 20 элементов, пока я читаю из XML-файла, возвращенного из запроса. Если я тестирую код, удаляя ссылки на вывод XML и просто позволяя коду проходить через циклы подсчета с простым выводом, он работает.

Я не понимаю, что в XML-файле может быть причиной этого — из-за незначительных изменений в некоторых XML-данных после первых 20 публикаций.
Кто-нибудь может помочь?

Вот код:

 <?php
// Get xml file from Tumblr API and load
$request_url = "http://abstractmueller.tumblr.com/api/read";
$xml = simplexml_load_file($request_url);
// Get total number of posts, set max number of posts and calculate loop critical info
$posts_data = $xml->posts[0]->attributes();
$posts_max = 50;
$loop_number = ceil($posts_data['total']/$posts_max);
$loop_remainder = $posts_data['total']%$posts_max;
echo '<p>Total posts = '.$posts_data['total'].'</p>';
echo '<p>Loop number = '.$loop_number.'</p>';
?>
<div>
<?php
// Start outer loops to fetch up to 50 post-related image urls each fetch
for ($outer_loop = 1; $outer_loop <= $loop_number; $outer_loop++){
$post_start = ($outer_loop - 1) * $posts_max;
echo '<p>Current loop = '.$outer_loop.'</p>';
// Branch looping so first branch loops through each batch of 50 images, then use last loop to limit looping to the remainder
if ($outer_loop < $loop_number) {
echo '<p>Post start = '.$post_start.'</p>';
echo '<p>Loop end = '.($post_start + $posts_max-1).'</p>';
$request_url = 'http://abstractmueller.tumblr.com/api/read?start='.$post_start.'&num='.$posts_max;
echo '<p>XML URL '.$request_url.'</p>';
// Get post URLs and image URLs in batches of 50
for ($img_num = ($post_start); $img_num < ($post_start + $posts_max); $img_num++) {
$blog_url = $xml->posts->post[$img_num]->attributes();
$photo_url = $xml->posts->post[$img_num]->{'photo-url'}[2];
echo '<p>Image '.$img_num.' Blog URL '.$blog_url['url'].' Image URL '.$photo_url.'</p>';
}
} else {
echo '<p>Post start = '.$post_start.'</p>';
echo '<p>Loop end = '.($post_start + $loop_remainder - 1).'</p>';
$request_url = 'http://abstractmueller.tumblr.com/api/read?start='.$post_start.'&num='.$loop_remainder;
echo '<p>XML URL '.$request_url.'</p>';
// Get post URLs and image URLs up to the total remainder
for ($img_num = $post_start; $img_num <= $loop_remainder + $posts_max; $img_num++) {
$blog_url = $xml->posts->post[$img_num]->attributes();
$photo_url = $xml->posts->post[$img_num]->{'photo-url'}[2];
echo '<p>Image '.$img_num.' Blog URL '.$blog_url['url'].' Image URL '.$photo_url.'</p>';
}
}
}
?>
<div>

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]