【问题标题】:Automating authentication with the twitteR package使用 twitteR 包自动进行身份验证
【发布时间】:2016-03-06 14:24:25
【问题描述】:

我正在 R 中运行 twitter 情绪分析,并按照 twitteR 包中的示例设置 OAuth 参数,如下所示:

library(ROAuth)
library(twitteR)
library(RCurl) 
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))


reqURL <- "https://api.twitter.com/oauth/request_token"
accessURL <- "https://api.twitter.com/oauth/access_token"
authURL <- "https://api.twitter.com/oauth/authorize"
consumerKey <- "xxxxxxxxxxxxxxxxxxxxxxx"
consumerSecret <- "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

twitCred <- OAuthFactory$new(consumerKey=consumerKey,
                             consumerSecret=consumerSecret,
                             requestURL=reqURL,
                             accessURL=accessURL,
                             authURL=authURL)
twitCred$handshake()
registerTwitterOAuth(twitCred)

我还想在 R 环境中维护身份验证,这样我就不需要在每次启动和加载此脚本时都进行握手。例如,我运行这段代码并保存环境。然后在重新启动 R 以运行 searchTwitter 等函数时,我收到此错误:

Error in twInterfaceObj$doAPICall(cmd, params, "GET", ...) : 
  OAuth authentication is required with Twitter's API v1.1

我认为registerTwitterOAuth(twitCred) 是在 R 环境中保存我的身份验证详细信息的原因,但我想我错了。如果我手动执行所有操作,身份验证以及我的 twitter 抓取工作正常,但我想最终在 linux 服务器上自动执行此脚本。

我必须做什么才能使身份验证保留在 R 环境中,以便我可以运行自动化脚本?

我在 Windows 7 x64 机器上运行 R v.3.1.1 x64。

【问题讨论】:

    标签: r twitter


    【解决方案1】:

    类似:

    save(twitCred, file="~/.twitteR_creds")
    

    然后将其取回以备将来使用:

    load(""~/.twitteR_creds")
    registerTwitterOAuth(twitCred)
    

    (我在 linux/OS X 上使用 ~/.twitteR_creds,但尝试在 Windows 上做类似的事情,这样您的 API 密钥/凭据就可以在您可能最终与他人共享的代码区域之外。

    【讨论】:

      【解决方案2】:

      你也可以看看这个:https://stackoverflow.com/a/29505711

      除了 hrbrmstr 建议将凭据保存在脚本之外的您自己的用户文件夹中! ...考虑将其用于“无头”身份验证:

      library(httr)
      options("httr_oauth_cache"=FALSE)
      
      # 1. Find OAuth settings for twitter:
      #    https://dev.twitter.com/docs/auth/oauth
      oauth_endpoints("twitter")
      
      # 2. Register an application at https://apps.twitter.com/
      #    Make sure to set callback url to "http://127.0.0.1:1410"
      #
      #    Replace key and secret below
      myapp <- oauth_app("twitter",
        key = "fookey",
        secret = "foosecret"
      )
      
      # 3. Get OAuth credentials
      access_token="footoken"
      access_secret="footokensecret"
      
      twitter_token <-
        Token1.0$new(
          endpoint      = NULL,
          params        = list(as_header = TRUE),
          app           = myapp,
          credentials   = list(
            oauth_token = access_token,
            oauth_token_secret = access_secret
          )
        )
      
      
      # 4. Use API
      req <- GET("https://api.twitter.com/1.1/statuses/home_timeline.json",
        config(token = twitter_token))
      stop_for_status(req)
      content(req)
      

      【讨论】:

        猜你喜欢
        • 2018-05-03
        • 2012-08-06
        • 1970-01-01
        • 2013-02-26
        • 2011-12-23
        • 2012-01-06
        • 1970-01-01
        • 2017-09-15
        • 1970-01-01
        相关资源
        最近更新 更多