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の乗り換えをためらう理由はもうありません。がんがん使っていきましょう!