httrのOAuth1.0のバグが直ったのでrtweetもガンガン使っていきましょう

httrがメンテされてないっぽい、という絶望をちょっと前に吐露しましたが、

なんと、httr2はまだ先ということでhttrのメンテが再開されました!

昨日、私のPRがマージされたので、OAuth1.0でUTF-8文字を含むリクエストを正しく送れないというバグは直りました。

Before

このバグを踏むシチュエーションとして多いのは、Twitter APIを使うときです。例えば、以下の記事に書いたんですが、今のCRAN版のhttrでTwitter APIを使おうとするとエラーになります。

library(httr)

oauth_endpoints("twitter")
myapp <- oauth_app("twitter",
                   key    = "xxxx",
                   secret = "xxxx")

twitter_token <- oauth1.0_token(oauth_endpoints("twitter"), myapp)

res <- GET("https://api.twitter.com/1.1/search/tweets.json",
           query = list(q = "フジロック"),
           config(token = twitter_token))
#> Warning message:
#> In chars[!ok] <- unlist(lapply(chars[!ok], encode)) :
#>   number of items to replace is not a multiple of replacement length

stop_for_status(res)
#> Error: Unauthorized (HTTP 401).

rtweetパッケージでも同じです。内部で使っているのはhttrなので。

rtweet::search_tweets("フジロック", token = twitter_token)
#> Searching for tweets...
#> Finished collecting tweets!
#>   screen_name user_id created_at status_id text retweet_count favorite_count is_quote_status quote_status_id is_retweet
#> 1          NA      NA         NA        NA   NA            NA             NA           FALSE            <NA>      FALSE
#>   retweet_status_id in_reply_to_status_status_id in_reply_to_status_user_id in_reply_to_status_screen_name lang source
#> 1              <NA>                           NA                         NA                             NA   NA   <NA>
#>   media_id media_url media_url_expanded urls urls_display urls_expanded mentions_screen_name mentions_user_id symbols
#> 1       NA        NA                 NA   NA           NA            NA                   NA               NA      NA
#>   hashtags coordinates place_id place_type place_name place_full_name country_code country bounding_box_coordinates
#> 1       NA        <NA>       NA         NA         NA              NA           NA      NA                       NA
#>   bounding_box_type
#> 1                NA
#> Warning message:
#> In chars[!ok] <- unlist(lapply(chars[!ok], encode)) :
#>   number of items to replace is not a multiple of replacement length

After

これがいまや、ちゃんとリクエストを送れるようになっています!

res <- GET("https://api.twitter.com/1.1/search/tweets.json",
           query = list(q = "フジロック"),
           config(token = twitter_token))

stop_for_status(res)

s <- content(res)
s$statuses[[1]]$text
#> [1] "【定期】BUMP/アジカン/サカナ/BAWDIES/[A]/MWAM/モンパチ/くるり/サンボ/チャット/フジ/モールル/時雨/9mm/星野源……etc邦ロック好きです!お気軽にフォローしてください(´ω`)"

もちろんrtweetも。

#> rtweet::search_tweets("フジロック", token = twitter_token)
#> Searching for tweets...
#> Finished collecting tweets!
#>         screen_name            user_id          created_at          status_id
#> 1         I_comet20          552540050 2017-07-24 20:31:46 889583908345356288
#> 2         Kumiko_33          142417464 2017-07-24 20:31:39 889583879752830976
#> 3         Kumiko_33          142417464 2017-07-24 20:31:37 889583872723214336

まとめ

このhttrがリリースされればtwitteRの乗り換えをためらう理由はもうありません。がんがん使っていきましょう!