【问题标题】:Twitter API v2.0 DELETE request using httr and R使用 httr 和 R 的 Twitter API v2.0 删除请求
【发布时间】:2021-11-25 01:22:39
【问题描述】:

由于在 API 编程方面的经验很少,我正在寻找一种使用 Twitter API v2.0 和 R 中的 httr 包发送 DELETEPOST 请求的方法。我通常使用 academictwitteR 包来与 API 交互,但包使用不记名令牌身份验证,这在我看来不足以写入权限(DELETE 和 POST 需要)。因此,第一步似乎是将 OAuth 1.0a 身份验证凭据设置为described here。我从我创建的应用程序中下载并存储了四个变量(oauth_tokenoauth_token_secretoauth_consumer_keyoauth_consumer_secret),但后来我不知道如何使用httr 设置请求。

我无法提供示例,因为我无法弄清楚代码,希望您能理解。非常感谢任何帮助!

【问题讨论】:

    标签: r twitter twitter-oauth httr


    【解决方案1】:

    我查看了您提供的 DELETE 和 POST 请求的 curl 示例。它们在下面的 R 中重写。不过,您需要替换 $OAUTH_SIGNATURE。请让我知道它是否适合您,因为我没有 Twitter 帐户,也没有 OAuth 令牌,因此无法检查代码。

    library(httr)
    
    r <- DELETE(url = "https://api.twitter.com/2/users/2244994945/following/6253282",
                add_headers('Authorization'= 'OAuth $OAUTH_SIGNATURE'))
    
    content(r)
    
    
    r <- POST(
      url = "https://api.twitter.com/2/users/6253282/following",
      body = c("target_user_id" = "2244994945"),
      add_headers('Authorization'= 'OAuth $OAUTH_SIGNATURE'),
      content_type_json()
      )
    
    content(r)
    

    【讨论】:

    • 嗨!谢谢你!我如何从四个键中获取 $OAUTH_SIGNATURE 呢?我在这里找到了描述,但我不确定如何使用httr 进行设置:developer.twitter.com/en/docs/authentication/oauth-1-0a/…
    • @eborbath 我不熟悉 Twitter API,抱歉。尝试阅读文档并确定您需要执行的 http 请求。另请注意,如果这对您来说是一个可行的选择,您可以从 R 发出 curl 请求。
    • 也许这两个文件之一可能有用,但据我所知,它们为闪亮的应用程序进行身份验证:1. gist.github.com/jnolis/a41c196a5e22e2a2115d28e853d4780c 2. gist.github.com/jnolis/49d328f58e6bb0074442d032f4e79c7f
    • 我试图用谷歌搜索你的问题,似乎有一个包 twittR 具有设置 OAuth 的功能 (setup_twitter_oauth("API key", "API secret", "Access token", "访问秘密"))。你有没有考虑过使用它?对我来说很难帮助你,因为我对 OAuth 不太熟悉,而且没有机会测试我的代码,很难想出有用的东西。
    【解决方案2】:

    不确定您的具体要求以及您之前尝试过的内容。

    只使用rtweet 包会是一个解决方案吗?

    它非常方便,并提供了很多与 twitter api 交互的功能(也可以发布和删除推文)

    例如

    #Posting
    post_tweet("hello world")
    
    #Following
    post_follow("someuser")
    
    # Not sure about deleting, but should work like this
    post_tweet(destroy_id= "postID")
    

    要让您发布 ID 以删除它,您可以使用 get_my_timeline。这应该为您的帖子提供 ID。

    请参阅此处的小插曲,了解有关函数的简短 intro

    当然,您首先还需要一个访问令牌。 他们有一个很好的explanation page 关于如何做到这一点。还有一个FAQ 来解决问题。解释相当长,可能过于具体,无法在此处详细介绍。但是知道它是否适合您会很有趣。

    进一步的事情:

    1. 确保您已安装 httpuv
    2. 确保拥有最新的 rtweet 版本(我认为最好来自 github)
    3. 还要检查以下内容:转到 developer.twitter.com/en/apps,然后转到您的应用程序。在“权限”下,确保提供读和写。在“应用程序详细信息”下添加 127.0.0.1:1410 作为回调 URL。在“密钥和令牌”下创建您的密钥
    4. 重新生成您的令牌/密钥

    所以试试这个:

    install.packages("httpuv")
    devtools::install_github("mkearney/rtweet")
    
    library(rtweet)
    library(httpuv)
    
    create_token(
    app = appname,
    consumer_key = key,
    consumer_secret = secret,
    access_token = access_token,
    access_secret = access_secret
    )
    

    更新 我刚刚看到,在 github 的最新版本上,他们完全改变了他们的方法,create_token 现在已经贬值了。

    这是新的方法:documentation

    看来你现在应该使用rtweet_bot()

    library("askpass")
    rtweet_bot(
      api_key = askpass("API key"),
      api_secret = askpass("API secret"),
      access_token = askpass("access token"),
      access_secret = askpass("access token")
    )
    

    我发布的其余代码应该保持不变。

    总的来说,现在似乎有 3 种验证方式:

    rtweet_user() 以交互方式验证现有 Twitter 用户。 如果您希望 rtweet 控制您的 推特账号。

    rtweet_app() 作为 twitter 应用程序进行身份验证。一个应用程序 不能执行动作(即它不能发推文),但有 通常更高的速率限制(即您可以进行更多搜索)。看 详情在 https://developer.twitter.com/en/docs/basics/rate-limits.html。这 如果您正在收集数据,表格是最合适的。

    rtweet_bot() 认证为代表一个机器人采取行动的机器人 应用程序。如果你想创建一个推特,这种形式是最合适的 由计算机而非人类运行的帐户。

    【讨论】:

    • 我知道这个包,但正如我在问题中提到的,我的 oauth 过程有问题。我尝试了 token 127.0.0.1:1410 和 127.0.0.1:1410,但是在 get_token() 之后浏览器中什么也没有发生,除了 R 控制台中的输出。我认为软件包发布后 API 发生了变化
    • 您是否也尝试过解释页面中的“1. 基于浏览器的身份验证”?
    • 为了确定,我稍后会自己尝试验证。但我很确定它应该可以工作。该软件包每月有 25k 次下载,我没有看到最近的问题 (github.com/ropensci/rtweet/issues) 验证不再起作用。你能发布控制台输出吗?
    • 还要检查以下内容:转到developer.twitter.com/en/apps,然后转到您的应用程序。在“权限”下,确保提供读和写。在“应用程序详细信息”下添加 127.0.0.1:1410 作为回调 URL。在“密钥和令牌”下创建您的密钥。
    • 所以,如果我执行第一种方法 1. 基于浏览器的身份验证,我会收到此错误: twitter_init_oauth1.0 中的错误(self$endpoint, self$app, permission = self$params$permission, :禁止(HTTP 403)。如果我执行第二个 2. 访问令牌/秘密方法,我在 get_token() 请求后得到此输出:api.twitter.com/oauth/request_token 授权:api.twitter.com/oauth/authenticate 访问:api.twitter.com/oauth/access_token eborbath 密钥:XYZ 秘密: oauth_token, oauth_token_secret
    猜你喜欢
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多