2012-11-16 2 views
0

Эта проблема действительно меня озадачивает. Я начну с объяснения того, что я пытаюсь сделать:Устаревший канал Picasa в PHP

На веб-сайте, который я разрабатываю, я хотел бы отображать альбомы с фотографиями, полученными из определенной учетной записи в Picasa. Для этого я использую XML-канал (http://picasaweb.google.com/data/feed/api/user/userID). Я загружаю этот канал с помощью объекта SimpleXMLElement.

Теперь странно, когда я добавляю/удаляю фотографию в/из альбома, изменения требуют определенного времени (обычно несколько минут), чтобы вступить в силу. Объект PHP по-прежнему получает старые данные. Теперь это было бы не так странно, учитывая, что Google может захотеть ограничить количество запросов, однако при загрузке фида в Firefox изменения отображаются немедленно.

Что вызывает эту задержку, и могу ли я что-нибудь с этим сделать? Есть ли разница между FF и PHP при получении фида? Я заметил, что этот вопрос задан a while back, но без каких-либо ответов, и я подумал, что он слишком стар, чтобы его обмануть.

Я попытался использовать файлы file_get_contents и curl, но ни один из них не работает. Видимо проблема не в PHP, так как в другом вопросе использовался C#.

редактировать - вот запрос заголовок из Firefox:

Expires: Fri, 16 Nov 2012 19:22:45 GMT 
Date: Fri, 16 Nov 2012 19:22:45 GMT 
Cache-Control: private, max-age=0, must-revalidate 
Content-Type: application/atom+xml; charset=UTF-8; type=feed 
Vary: Accept, X-GData-Authorization, GData-Version, Cookie 
GData-Version: 2.0 
Etag: W/"DEEBQnk9fyp7ImA9WhNQEEU." 
Last-Modified: Fri, 16 Nov 2012 17:24:13 GMT 
Content-Encoding: gzip 
X-Content-Type-Options: nosniff 
X-Frame-Options: SAMEORIGIN 
X-XSS-Protection: 1; mode=block 
Server: GSE 

200 OK 

и заголовок ответа от завитка:

HTTP/1.1 200 OK 
Expires: Fri, 16 Nov 2012 19:30:26 GMT 
Date: Fri, 16 Nov 2012 19:30:26 GMT 
Cache-Control: private, max-age=0, must-revalidate, no-transform 
Set-Cookie: _rtok=lL_1sPFA07ra; Path=/; HttpOnly 
Set-Cookie: S=photos_html=jHfi_UGm4xVujZVehiIOpw; Domain=.google.com; Path=/; HttpOnly 
Content-Type: application/atom+xml; charset=UTF-8; type=feed 
Vary: Accept, X-GData-Authorization, GData-Version, Cookie 
GData-Version: 2.0 
ETag: W/"DEEBQnk9fyp7ImA9WhNQEEU." 
Last-Modified: Fri, 16 Nov 2012 17:24:13 GMT 
X-Content-Type-Options: nosniff 
X-Frame-Options: SAMEORIGIN 
X-XSS-Protection: 1; mode=block 
Server: GSE 
Transfer-Encoding: chunked 

редактировать 2: Я думаю, что я понял это! По-видимому, фид обновляется каждые несколько минут при просмотре анонимно. Тем не менее, в Firefox был сохранен мой сеанс регистрации в Picasa, поэтому он учитывался как авторизованный запрос. У Chrome не было этого сеанса, и поэтому он не обновлялся мгновенно. Как только я также разрешил Picasa хранить файл cookie в Chrome, он мгновенно обновлялся, а Opera все еще задерживалась. Собираюсь ответить на другой вопрос, если плакат по-прежнему заинтересован.

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

+1

Можете ли вы показать заголовки запроса/ответа для запроса PHP и запроса Firefox? Мне любопытно, может ли Picasa внутренне кэширует запрос на основе чего-то в заголовках? –

+0

@cillosis Добавил их в вопрос. Казалось бы, настройка cookie может иметь к этому какое-то отношение? – Bastiaan

+0

Хмм интересно, когда вы посещаете тот же канал из Chrome, данные также устарели. Возможно, какой-то токен установлен в cookie, который позволяет получить доступ к самым последним данным? – Bastiaan

ответ

0

Проверьте заголовки запроса/ответа на запрос PHP и запрос Firefox. Это должно дать понять, почему оно работает в одном случае, а не в другом.

В вашем случае, как вы определили по своему усмотрению (хорошая работа кстати), у Firefox были ваши учетные данные авторизации Picasa, которые позволяли извлекать не кешированную версию.