Я работаю на благотворительность, которая продвигает язык жестов, и они хотят размещать видео на свою страницу FB каждый день. Там большое (и растущее) количество видео, поэтому они хотят запланировать загрузку программно. Я не против, какой язык программирования в конечном итоге делаю это, но я пробовал следующее и не очень далеко:
-
Perl, используя
WWW::Facebook::API
(старый API REST) my $res = $client->video->upload( title => $name, description => $description, data => scalar(read_file("videos/split/$name.mp4")) );
Аутентификация в порядке, и это правильно отправляет метод
facebook.video.upload
вhttps://api-video.facebook.com/restserver.php
. К сожалению, это возвращает "Метод неизвестен". Я предполагаю, что это связано с устаревшим API REST. -
Facebook::Graph
в Perl илиfb_graph
gem в Ruby. (API OAuth)Я не могу даже аутентифицироваться. Оба они ориентированы на веб-приложения, а не на настольные приложения OAuth, но я думаю, что я должен это сделать:
my $fb = Facebook::Graph->new( app_id => "xxx", secret => "yyy", postback => "https://www.facebook.com/connect/login_success.html" ); print $fb->authorize->extend_permissions(qw(publish_stream read_stream))->uri_as_string;
Перейдите к этому URL-адресу в моем браузере, запишите возвращаемый параметр
code
, а затемmy $r = $fb->request_access_token($code);
К сожалению:
Could not fetch access token: Bad Request at /Library/Perl/5.16/Facebook/Graph/AccessToken/Response.pm line 26
-
Аналогично в Ruby, используя
fb_graph
,fb_auth = FbGraph::Auth.new(APP_ID, APP_SECRET) client = fb_auth.client client.redirect_uri = "https://www.facebook.com/connect/login_success.html" puts client.authorization_uri( :scope => [:publish_stream, :read_stream] )
Дает мне URL-адрес, который возвращает код, но работает
client.authorization_code = <code> FbGraph.debug! access_token = client.access_token!
возвращает
{ "error": { "message": "Missing client_id parameter.", "type": "OAuthException", "code": 101 } }
Обновление. Когда я меняю вызов
access_token!
наaccess_token!("foobar")
, чтобы заставить Rack:: OAuth2:: Client поместить идентификатор и секрет в тело запроса, вместо этого получим следующую ошибку:{ "error": { "message": "The request is invalid because the app is configured as a desktop app", "type": "OAuthException", "code": 1 } }
Как я могу аутентифицировать приложение для настольных компьютеров и командной строки для Facebook с помощью OAuth?