Sim*_*ens 21 ruby perl facebook facebook-graph-api
我正在为一个促进手语的慈善机构工作,他们希望每天将视频发布到他们的FB页面.视频数量很大(且不断增长),因此他们希望以编程方式安排上传.我真的不介意我最终在做什么编程语言,但是我尝试了以下内容并没有走得太远:
Perl使用WWW::Facebook::API
(旧的REST API)
my $res = $client->video->upload(
title => $name,
description => $description,
data => scalar(read_file("videos/split/$name.mp4"))
);
Run Code Online (Sandbox Code Playgroud)
身份验证没问题,这正确地发布了一个facebook.video.upload
方法https://api-video.facebook.com/restserver.php
.不幸的是,这会返回"方法未知".我认为这与弃用的REST API有关.
Facebook::Graph
在Perl或fb_graph
Ruby中的gem.(OAuth API)
我甚至无法进行身份验证.这两个都面向网络而不是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;
Run Code Online (Sandbox Code Playgroud)
在我的浏览器中转到该URL,捕获code
返回的参数,然后
my $r = $fb->request_access_token($code);
Run Code Online (Sandbox Code Playgroud)
不幸:
Could not fetch access token: Bad Request at /Library/Perl/5.16/Facebook/Graph/AccessToken/Response.pm line 26
Run Code Online (Sandbox Code Playgroud)同样在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]
)
Run Code Online (Sandbox Code Playgroud)
给我一个返回代码但正在运行的URL
client.authorization_code = <code>
FbGraph.debug!
access_token = client.access_token!
Run Code Online (Sandbox Code Playgroud)
回报
{
"error": {
"message": "Missing client_id parameter.",
"type": "OAuthException",
"code": 101
}
}
Run Code Online (Sandbox Code Playgroud)
更新:当我更改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
}
}
Run Code Online (Sandbox Code Playgroud)我应该如何使用OAuth验证桌面/命令行应用程序到Facebook?
所以,我终于让它工作了,没有设置Web服务器并进行回调.反直觉的诀窍是关闭 "桌面应用程序"设置而不是请求offline_access
.
FaceBook::Graph
发布视频的支持目前似乎不起作用,所以我最终在Ruby中做了.
fb_auth = FbGraph::Auth.new(APP_ID, APP_SECRET)
client = fb_auth.client
client.redirect_uri = "https://www.facebook.com/connect/login_success.html"
if ARGV.length == 0
puts "Go to this URL"
puts client.authorization_uri(:scope => [:publish_stream, :read_stream] )
puts "Then run me again with the code"
exit
end
if ARGV.length == 1
client.authorization_code = ARGV[0]
access_token = client.access_token! :client_auth_body
File.open("authtoken.txt", "w") { |io| io.write(access_token) }
exit
end
file, title, description = ARGV
access_token = File.read("authtoken.txt")
fb_auth.exchange_token! access_token
File.open("authtoken.txt", "w") { |io| io.write(fb_auth.access_token) }
me = FbGraph::Page.new(PAGE_ID, :access_token => access_token)
me.video!(
:source => File.new(file),
:title => title,
:description => description
)
Run Code Online (Sandbox Code Playgroud)
问题是在你的情况下,对于OAuth,你需要一些端点URL,可以通过互联网公开到达Facebook服务器,对于普通的客户端PC,或者能够使用WebViews的桌面应用程序,这可能是不行的(和我一样)假设,命令行不是).
Facebook在https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow#login中指出,您可以构建桌面客户端登录流程,但只能通过所谓的WebViews.因此,您需要像这样调用OAuth端点:
https://www.facebook.com/dialog/oauth?client_id={YOUR_APP_ID}&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token&scope={YOUR_PERMISSION_LIST}
Run Code Online (Sandbox Code Playgroud)
然后,您必须检查生成的重定向WebView URL为引用:
使用桌面应用程序并登录时,Facebook会将人员重定向到上面提到的redirect_uri,并在URI片段中放置一个访问令牌以及其他一些元数据(例如令牌到期时间):
Run Code Online (Sandbox Code Playgroud)https://www.facebook.com/connect/login_success.html#access_token=ACCESS_TOKEN...
您的应用需要检测此重定向,然后使用您正在使用的操作系统和开发框架提供的机制从URI中读取访问令牌.
如果您想在"黑客模式"中执行此操作,我建议您执行以下操作:
https://developers.facebook.com/tools/explorer?method=GET&path=me%2Faccounts
端点.请记住提供"manage_pages"和"publish_actions"权限.
curl -v -0 --form title = {YOUR_TITLE} - 表格描述= {YOUR_DESCRIPTION} - 表格来源= @ {YOUR_FULL_FILE_PATH} https://graph-video.facebook.com/ {YOUR_PAGE_ID}/videos?access_token = {} YOUR_ACCESS_TOKEN
参考文献:
https://developers.facebook.com/docs/graph-api/reference/page/videos/#publish https://developers.facebook.com/docs/reference/api/video/
归档时间: |
|
查看次数: |
5157 次 |
最近记录: |