Open Graph Action POST се проваля, когато се извиква чрез неплатен екземпляр, базиран на google app engine

urlopen се проваля с код 500 и грешка '{"error_code":1,"error_msg":"Възникна неизвестна грешка"}' от Facebook при публикуване на Open Graph Action. Мога да накарам кода да работи с други публикации (напр. публикуването на коментар за състояние с помощта на API на графиката работи добре). Мога също така да накарам тази публикация за действие да работи с помощта на 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 модула. Това също не проработи). Използвам този thru goole app engine.


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 да се провали - всеки, който има представа, моля да сподели).

Заобиколих това чрез 'taskqueue' urlopen/OG-action-post - и когато това се извика втори път (FB очевидно кешира обекта за първи път), успява.

Ако някой има нужда от повече подробности, да се свърже с мен и съм повече от щастлив да ви спестя цялото време и болка, през които вече съм минал..

person user1055761    schedule 27.05.2012
comment
Предполагам, че когато платеното приложение на google engine ще позволи множество паралелни или едновременни заявки да успеят и този проблем не трябва да се случва. Въпреки че не съм тествал/потвърдил. Някой работи ли това - моля, можете ли да споделите своя опит/гледища. Благодаря. - person user1055761; 27.05.2012