ちょっとExcelでニコニコ動画のAPIを読み込みたいと思ったので、試してみました。
まずは、下記のようなシートを用意。
作りたいのは、A列の2行目以降に動画IDを書いて、その左側にその動画の情報を書き込んでいくというもの。
VBAはほとんど触ったことがないので、Rangeプロパティだとか、Offsetプロパティだとかの概念がよく分かってなかったのですが、なんとか作ることができました。
Sub nico() Dim xdoc As Object Dim url As String Dim a_col As Range Dim a_end As Integer Set a_col = Range("A2", Range("A1").End(xlDown)) 'A列の動画IDをすべて選択 Set xdoc = CreateObject("MSXML2.DOMDocument") xdoc.async = False For Each cell In a_col url = "http://ext.nicovideo.jp/api/getthumbinfo/" & cell.Value If (xdoc.Load(url) = False) Then MsgBox "アクセス失敗:" & cell.Offset(0, 0).Value Exit Sub End If For Each obj In xdoc.DocumentElement.SelectNodes("//thumb") cell.Offset(0, 1).Value = obj.SelectNodes("//title").Item(0).Text 'タイトル cell.Offset(0, 2).Value = obj.SelectNodes("//thumbnail_url").Item(0).Text 'サムネイルURL cell.Offset(0, 3).Value = obj.SelectNodes("//view_counter").Item(0).Text '再生数 cell.Offset(0, 4).Value = obj.SelectNodes("//comment_num").Item(0).Text 'コメント数 cell.Offset(0, 5).Value = obj.SelectNodes("//mylist_counter").Item(0).Text 'マイリスト数 If obj.SelectNodes("//user_id").Length = 1 Then cell.Offset(0, 6).Value = obj.SelectNodes("//user_id").Item(0).Text 'ユーザーID End If If obj.SelectNodes("//tag[@category]").Length = 1 Then cell.Offset(0, 7).Value = obj.SelectNodes("//tag[@category]").Item(0).Text 'カテゴリータグ End If Dim tag_i As Integer tag_i = 1 For Each Tag In obj.SelectNodes("//tag") cell.Offset(0, tag_i + 7).Value = Tag.Text 'タグ tag_i = tag_i + 1 Next Next Next Columns("B").AutoFit 'B列は自動的に幅調整 End Sub
XPathにはあまりなれてないのですが、属性で判断するカテゴリータグを取得したいということもあり、XPathを利用することに。
19行目で動画情報が取得できたかどうかの可否、25行目でユーザーIDがあるかどうかの可否、28行目でカテゴリータグがあるかどうかの可否を調べて条件分けしてます(動画情報が取得できたどうかは、If文じゃなくて、For Each文を使ってるので、間違ったつかいかたかもしれません)。
というわけで、実行してみました。
相変わらず、カテゴリーがうまく取得できていないところがありますが、他は問題なくいけたようです。
ありえない動画ID(この例では、sm1とaiueo)は動画情報を取得していませんし、ユーザーIDやカテゴリーも見つからなかったものは飛ばしているよう。数値のみの動画IDの動画情報もうまく取得できました。
今気づいたんですが、カテゴリータグってタグの一番目とは限らないんですね。てっきり、一番目なのかと・・・。ということは、カテゴリーが取得できない場合、一番目のタグを見て判断するという方法は使えないのか・・・。
ところで、自分が使ってるExcelはExcel2010なのですが、Excel2013だとWEBSERVICE関数なんていう便利なものがあるよう(参考:Excel 2013で追加された「WEBSERVICE」関数を使って、マクロを使わずWeb APIを利用する。 | 初心者備忘録)
何これ。すごい便利そう。
コメント