gpt4 book ai didi

ruby - 为命令行(桌面)应用程序获取 Facebook 身份验证 token

转载 作者:数据小太阳 更新时间:2023-10-29 06:30:20 39 4
gpt4 key购买 nike

我在一家推广手语的慈善机构工作,他们想每天在他们的 FB 页面上发布一段视频。有大量(并且还在不断增加)的视频,因此他们希望以编程方式安排上传。我真的不介意我最终用什么编程语言来做这件事,但我已经尝试了以下并没有走得太远:

  • Perl 使用 WWW::Facebook::API (旧的 REST API)

    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。不幸的是,这会返回“方法未知”。我认为这与 REST API 被弃用有关。

  • Facebook::Graph在 Perl 中或在 Ruby 中的 fb_graph gem。 (OAuth API)

    我什至无法验证。这两个都是针对 Web 而不是 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将标识符和 secret 放入请求正文中,我收到以下错误:

    {
    "error": {
    "message": "The request is invalid because the app is configured as a desktop app",
    "type": "OAuthException",
    "code": 1
    }
    }

我应该如何使用 OAuth 向 Facebook 验证桌面/命令行应用程序?

最佳答案

所以,我终于让它工作了,没有设置网络服务器和进行回调。与直觉相反,诀窍是关闭关闭“桌面应用程序”设置,而不是请求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
)

关于ruby - 为命令行(桌面)应用程序获取 Facebook 身份验证 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21978728/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com