ツイッターのアカウント名・プロフィール情報を抽出
今回は、ツイッターのプロフィール検索サービスから該当するキーワードのアカウント名とプロフィール内容を抽出する方法を解説します。
プロフィール検索サービスはいくつか存在しますが、今回は「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部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

