SimplePie не обрабатывает фликр-фид - PullRequest
2 голосов
/ 06 марта 2010

Я пытаюсь использовать SimplePie, чтобы получить флик группового пула:

$feed = new SimplePie();
$feed->set_feed_url('http://api.flickr.com/services/feeds/groups_pool.gne?id=25938750@N00&lang=en-us&format=rss_200');
$feed->init();
$feed->handle_content_type(); 

Затем я использую типичные вызовы SimplePie php для циклического просмотра элементов канала. Однако ничего не возвращается. HTML-код есть, но элементы канала не вставлены.

Когда я пытаюсь использовать ленту тегов flickr, например:

$feed->set_feed_url('http://api.flickr.com/services/feeds/photos_public.gne?tags=architecture,building&lang=en-us&format=rss_200');

Я получаю список фотографий из общедоступной фотоканала, но теги не учитываются.

Есть идеи? Единственное, о чем я могу думать, это то, что мне нужен ключ API, но на веб-сайте flickr нет ничего, что указывало бы на то, что ключ нужен для вызовов фида. Кроме того, я могу открыть оба типа каналов в своем браузере и получить нужный канал.

Ответы [ 5 ]

3 голосов
/ 19 августа 2010

Цель 'replace_invalid_with_pct_encoding' - экранировать все недопустимые символы в строке запроса.

, поэтому простое удаление может быть не самым безопасным вариантом. С тех пор недопустимые символы в ссылках, которые поступают через записи rss, также больше не экранируются. И это, вероятно, не то, что вы хотите.

Проблема, с которой вы столкнулись, связана не с вопросительным знаком, а с наличием символов «=» и «&» в вашем URL.

У меня была та же проблема, и я добавил эти два символа как «действительные» символы следующим образом:

$ this-> query = $ this-> replace_invalid_with_pct_encoding ($ query, '! ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 -._ ~ $ \' () * +,;: @ / = & ');

2 голосов
/ 08 марта 2010

Мне удалось найти ответ - спасибо ceejayoz за помощь в выяснении того, что искать.

Нашел ответ здесь .

В simplepie.inc вокруг строки 12146 вы должны увидеть следующую функцию:

function set_query($query)
{
if ($query === null || $query === '')
{
$this->query = null;
}
else
{
$this->query = $this->replace_invalid_with_pct_encoding($query,
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$\'()*+,;:@/?');
}
$this->valid[__FUNCTION__] = true;
return true;
}

Измените это на:

function set_query($query)
{
if ($query === null || $query === '')
{
$this->query = null;
}
else
{
$this->query = $query;
}
$this->valid[__FUNCTION__] = true;
return true;
}

Я не совсем уверен, как это влияет на другие вещи в коде, но, похоже, это работает для извлечения запрашиваемых элементов.

1 голос
/ 10 ноября 2010

Добавление "&=" к функции set_query работает как шарм!(Спасибо, Патрис)

Мне было неловко устанавливать нулевое значение, поскольку элементы безопасности этого пакета находятся над моей головой.Несколько часов билась в мою голову, пытаясь получить новости с моих форумов phpBB для ссылки на родственный сайт.

get_links была последней частью головоломки.У меня работает.

0 голосов
/ 05 марта 2012

У меня была та же проблема, и решение состояло в том, чтобы убедиться, что вы получаете RSS-канал для пула изображений группы, а не RSS-канал для обсуждения группы, тогда эскизы были легко доступны.

0 голосов
/ 31 марта 2010

Это было полезно для сценария Flickr / ZenPhoto / Picasa Web RSS, который я пишу, который создает небольшие квадратные пальцы из каналов.

Я хочу немного отшлифовать его и подготовить код для использования другими, а не только для себя, но здесь это так, как есть.

...