ツイッターのアカウント名・プロフィール情報を抽出
今回は、ツイッターのプロフィール検索サービスから該当するキーワードのアカウント名とプロフィール内容を抽出する方法を解説します。
プロフィール検索サービスはいくつか存在しますが、今回は「twpro」を利用してみます。
まずは、処理の流れを見ていきましょう。
- ①twproをIEで開く
- ②検索キーワードをテキストボックスに入力
- ③検索ボタンをクリック
- ④「もっと見る」をクリックし、全てのユーザーを表示させる
- ⑤ツイッターのアカウント名を抽出
- ⑥抽出したアカウント名の詳細ページを開く
- ⑦プロフィール内容を抽出
となります。
こちらは、完成したマクロになりますので、ご確認ください。
ツイッターのアカウント名・プロフィール情報抽出のマクロ
#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
#End If
Sub sample()
Dim objIE As InternetExplorer
'twproで検索
Call ieView(objIE, "http://twpro.jp/")
Call formText(objIE, "word", "有吉")
Call tagClick(objIE, "input", "検索")
label01:
If tagCheck(objIE, "a", "もっと見る") = True Then
Call tagClick(objIE, "a", "もっと見る")
Sleep 2000
GoTo label01
End If
'アカウント名取得
r = 2
For Each objTag In objIE.document.getElementsByTagName("span")
If InStr(objTag.outerHTML, "screen-name") > 0 Then
Cells(r, 2) = Right(objTag.innerText, Len(objTag.innerText) - 2)
r = r + 1
End If
Next
'プロフィール情報取得
r = maxRC("アカウント情報", 2)
For i = 2 To r
Call ieNavi(objIE, "http://twpro.jp/" & Cells(i, 2))
For Each objTag In objIE.document.getElementsByTagName("div")
If InStr(objTag.outerHTML, "class=""description") > 0 Then
Cells(i, 3) = objTag.innerText
End If
Next
Next i
End Sub
実行結果
それでは、1つずつ見ていきましょう。
'twproで検索
Call ieView(objIE, "http://twpro.jp/")
Call formText(objIE, "word", "有吉")
Call tagClick(objIE, "input", "検索")
こちらは「twproサイト」の検索ボタンをクリックするまでの処理です。
まずは、「ieView」で指定したURLをIEで開きます。
次に「twproサイト」のソースを見ていくと以下のようになります。
<form action='/search' method='get'>
<span>キーワード:</span>
<input id='word' name='word' size='60' type='text'>
<input id='go' type='submit' value='検索'>
<noscript>
<input id='nojs' name='nojs' type='hidden' value='1'>
</noscript>
</form>
フォームのテキストボックスに入力する「formText」を利用して、inputタグに「word」が含まれるテキストボックスへ「有吉」を入力します。
今回、「有吉」にした理由は特にありません(笑)
なんとなく思いついたのでこちらのキーワードにしました^^
次にタグをクリックする「tagClick」を利用して、inputタグに「検索」が含まれているタグをクリック処理をします。
これにより自動検索されます。
ここで検索は完了しましたが、検索された状態を見ると20アカウントしか表示されておらず、全て表示するには「もっと見る」をクリックする必要があります。こちらが表示されている間、ループ処理で何度でもクリックしていきます。
こちらのソースの中身を見ると「もっと見る」はaタグでくくられているのが確認できますね。
<div class="more" id="more-1"><a href="#">もっと見る</a></div>
以下は処理内容ですが、こちらのaタグが表示されている間クリック処理を繰り返します。
label01:
If tagCheck(objIE, "a", "もっと見る") = True Then
Call tagClick(objIE, "a", "もっと見る")
Sleep 2000
GoTo label01
End If
「もっと見る」があるかどうかをチェックするために「tagCheck」で確認していきます。
「If~Thenステートメント」ではaタグに「もっと見る」が含まれているaタグが存在する場合(True)に処理をするという流れになっています。
そして、「tagClick」で「もっと見る」をクリックしています。
「もっと見る」の処理はJavaScriptで処理をされているので通常の「ieCheck」で対応できない恐れがあるため、Sleepで2秒停止させています。
そのあとに、「GoToステートメント」でlabel01まで戻り再度処理を繰り返します。
こちらは「もっと見る」が表示されなくなるまでループ処理しますので、全てのアカウントが表示しされたらループから抜け出せます。
次ページはデータを抽出する方法について、解説しています。
次の記事: VBAのIE操作でツイッターアカウント取得1-2 >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。