Ошибка POST действия Open Graph при вызове через неоплаченный экземпляр на основе механизма приложения Google

urlopen завершается ошибкой с кодом 500 и ошибкой {"error_code":1,"error_msg":"Произошла неизвестная ошибка"}' от Facebook при публикации действия Open Graph. Я могу заставить код работать с другими сообщениями (например, публикация комментария к статусу с использованием графического API работает нормально). Я также могу заставить этот action-post работать с помощью curl. Таким образом, это похоже на проблему urllib2.urlopen при публикации данных формы с URL-адресом в качестве одного из значений.

Graph api post that works with curl :

curl -F 'access_token=nnnnnn' -F 'object=https://abc.com/123' \
'https://graph.facebook.com/me/namespace:action' -k


Same Graph api post thru urllib2 which gives the error :

from urllib2 import urlopen, Request, URLError

request = Request (url='http://graph.facebook.com/me/namespace:action';, 
                   data = urllib.urlencode(
                            {'object':'https://abc.com/123',
                             'access_token':'nnnnnnnn'
                            }, 
                   headers = {'Content-Type': 'application/x-www-form-urlencoded'}
          ) 
response = urlopen (request)

Что я могу делать неправильно? (Я новичок в urllib2.urlopen. Кстати, я изначально пробовал urlfetch.fetch через модуль urlfetch python. Это тоже не сработало). Я использую это через движок приложения Google.


person user1055761    schedule 20.05.2012    source источник
comment
какую ошибку выдает?   -  person Greg    schedule 21.05.2012
comment
urlopen завершается с ошибкой с кодом 500 и содержимым «{error_code:1,error_msg: Произошла неизвестная ошибка}». Я думаю, что это возвращается из URL-адреса графика Facebook в сообщении. Вероятно, он не может декодировать данные формы или что-то в этом роде. Мне интересно, есть ли кто-нибудь, кто делал посты «действие» в открытом графе facebook через Python. Хотелось бы увидеть фрагменты кода о том, как данные формы кодируются для вызова urlopen (или любой другой функции). Кстати, я также пытался использовать вызов urlfetch.fetch с методом POST, и это тоже не сработало.   -  person user1055761    schedule 22.05.2012


Ответы (1)


После изрядного количества копаний / пробных ошибок, наконец, удалось решить эту проблему.

Это не проблема с urllib urlopen, а скорее нюанс Google App Engine, когда при вызове сообщения о действии на открытом URL-адресе Graph Facebook инициирует «получение» на URL-адресе объекта (синхронно).

Таким образом, по сути, get вызывается в приложении движка приложения, в то время как активный экземпляр уже вызывает URL-адрес графа FB. В настоящее время я использую неоплаченный экземпляр, и это вызывает неожиданное поведение, такое как FB, не удается опубликовать OG (я вижу, что вход в журналы проходит успешно, в то время как активный пост, поэтому не уверен, что приводит к сбою FB - кто-нибудь, у кого есть понимание, поделитесь).

Я обошел это с помощью «очереди задач» urlopen/OG-action-post — и когда это вызывается во второй раз (по-видимому, FB кэширует объект в первый раз), это удается.

Если кому-то нужна дополнительная информация, свяжитесь с нами, и я более чем счастлив сэкономить вам все время и боль, через которые я уже прошел.

person user1055761    schedule 27.05.2012
comment
Я предполагаю, что когда платное приложение на движке Google позволит выполнить несколько параллельных или одновременных запросов, эта проблема не должна возникнуть. Хотя я не проверял/не подтверждал. У кого-нибудь это работает - пожалуйста, поделитесь своим опытом/взглядами. Спасибо. - person user1055761; 27.05.2012