書きなぐりメモ…
最近は時間があるので色々と受講しているのですが、タイミングがあって気になったものを気ままに受けていたので、どれを受けて受けてないのかが分からなくなってしまったので、じゃあRで確認するか…というのがモチベーションです。
ということで、RでconnpassのAPIを叩いて結果を見てみるというだけです。APIを叩くと言っても適当なアドレスにアクセスすればよいので難しいことは何もない。CGIの時代を思い出すわね…。
connpassのAPIについてはこちらを見てください。robots.txtも守ろうね。
Rのコードはざっくりこんな感じ。自分の受けたものを全て抜き出すだけです。件数は上限が100なので100を指定、orderも開催日時順にしています。
library(tidyverse) library(httr) library(jsonlite) nis <- GET("https://connpass.com/api/v1/event/?nickname=niszet&count=100&order=2") jsonlite::fromJSON(content(nis, "text")) %>% as_tibble()%>% jsonlite::flatten() -> nis_df
owner_nickname
を一緒に指定するとどうもORになるっぽいので、特定のイベント主のイベントのうち、自分が受けたものをみるには
events.owner_nickname
で絞り込めば良いですね。
受けてないものを見るならそれぞれのデータを取ってきて、events.event_id
を指定してanti_join
とか。
あとハマりどころとしては、content
で抜き出した文字列のままでは触りづらいのでfromJSON
に与えるとか、as_tibble
したあとは階層化されているのでflatten
通すべきとかですかね。RStudio上でView()
で見ると階層が潰されて表示されているので、そのままsetdiff
とかしようとするとよくわからないエラーが出て困った、みたいなハマりポイントもありましたが、データ構造は必ず何かしらの形で見ましょう。str
だと情報過多になるので、tibble
の場合はglimpse()
が良いでしょうな。
flatten
前のデータはこんな構造。eventsがdata.frameになってることがここで気づける。
jsonlite::fromJSON(content(nis, "text")) %>% as_tibble() %>% glimpse() Rows: 71 Columns: 4 $ results_start <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,... $ results_returned <int> 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 7... $ results_available <int> 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 7... $ events <df[,21]> <data.frame[36 x 21]>
ということで。Rで色々出来ると楽しいですね!
追記
flatten
ですが、purrr
パッケージにも同名の関数が含まれているため、jsonlite::
を明示的にしたほうがよいでしょう(上記のコードではそうなってます)
また、data.frameにした後の構造は下記のようになります。
> glimpse(nis_df) Rows: 72 Columns: 26 $ results_start <int> 1, 1, 1... $ results_returned <int> 72, 72,... $ results_available <int> 72, 72,... $ events.event_id <int> 181686,... $ events.title <chr> "9/19 O... $ events.catch <chr> "オンラインで... $ events.description <chr> "<h1>ご参... $ events.event_url <chr> "https:... $ events.started_at <chr> "2020-0... $ events.ended_at <chr> "2020-0... $ events.limit <int> NA, NA,... $ events.hash_tag <chr> "osc20h... $ events.event_type <chr> "partic... $ events.accepted <int> 43, 131... $ events.waiting <int> 0, 0, 0... $ events.updated_at <chr> "2020-0... $ events.owner_id <int> 313042,... $ events.owner_nickname <chr> "nagais... $ events.owner_display_name <chr> "nagais... $ events.place <chr> "オンライン"... $ events.address <chr> "オンライン"... $ events.lat <chr> NA, NA,... $ events.lon <chr> NA, NA,... $ events.series.id <int> 2186, 1... $ events.series.title <chr> "OSPN(O... $ events.series.url <chr> "https:...
また、例えば最近参加したTokyoRのイベントは下記のようにすれば良いです。このowner_nicknameが分かりづらいので(tokyorとかではない)どうしようっかな…って感じですけど…。イベントのURLからイベントのidは取れるので、それを指定してそこからownerを引っ張ってくるというのが良いかな。
nis_df %>% filter(events.owner_nickname=="kilometer") %>% select(events.title) events.title 1 第87回R勉強会@東京(#TokyoR) 2 第86回R勉強会@東京(#TokyoR) 3 第84回R勉強会@東京(#TokyoR) 4 第83回R勉強会@東京(#TokyoR) 5 第79回R勉強会@東京(#TokyoR) 6 第77回R勉強会@東京(#TokyoR)
あるいは、events.series.titleがTokyo.Rであること、あるいはevents.series.urlを見てイベントのページを見つける、などなど、でしょうか。