【PowerShell】(更新)PowerShell から Facebook にアクセスしてみる~Facebook PowerShell Module

2011.8.25 Facebook PowerShell Module のバージョンアップに伴いリライトしました

CodePlex に以下の SDK とモジュールが公開されています。

後者を見てざわざわしたものを感じた方は、完全に PowerShell にやられていると言って過言ではないでしょう。

理屈は追って説明することにして、まずは使ってみましょう。

以下をクリックして、Facebook PowerShell Module をダウンロードしてください。SDK はひとまず必要ありません

image←クリックしてダウンロード

ダウンロードしたファイルは ZIP形式になっているので、適当な場所(c:\tmp 等)に解凍したファイルを保存しましょう。

含まれているファイルは以下の通りです。

  • Facebook.dll
  • Facebook.pdb
  • Facebook.ps1
  • Facebook.psd1
  • Facebook.psm1
  • Facebook.xml
  • FacebookExamples.ps1
  • FacebookPSModule Alpha 0.3.3.msi ← インストーラー
  • Microsoft.Contracts.dll

インストールは簡単です。

上記の FacebookPSModule Alpha 0.3.3.msi を実行するだけです。

インストールが完了すると、以下のように、プロファイル内に Facebook というフォルダが作成され、必要なファイルがコピーされます。

C:\Users\<ユーザー名>\Documents\WindowsPowerShell\Modules\Facebook

さて、ここまでできたらいよいよ触ってみましょう。

[スタートメニュー] – [アクセサリ] – [Windows PowerShell] から [Windows PowerShell ISE] を開いてください。なぜ、通常の PowerShell コンソールじゃだめなのかというと、このコマンドレット、ウィンドウを使うのです(理由は後でわかります)。ウィンドウを使用する場合には、powershell.exe –STA でコンソールを起動すればOKなのですが、なぜかこれではうまく動作せず...なので悩んでも仕方ないので今回は ISE を使用します。

ISE を起動したら、まずは Import コマンドで Facebook コマンドレットを読み込みます。以下のコマンドを入力してください。

PS C:\> Import-Module facebook

さらに、以下を入力してコマンドレットの一覧を確認しましょう。「新規追加」と書いているのは、alpha v 0.2 から新たにサポートされたコマンドレットです。

 

PS C:\> Get-Command –Module facebook

CommandType Name Definition ----------- ---- ---------- Function Add-FBEvent ... Function Add-FBPhoto ... ← 新規追加 Function Clear-FBConnection ... Function Convert-FBJSON ... Function Convert-FBJSONHash ... Function Get-FBAlbums ... ← 新規追加 Function Get-FBAssociation ... Function Get-FBConnection ... Function Get-FBEvents ... Function Get-FBFeed ... Function Get-FBFriends ... Function Get-FBObjectData ... Function Get-FBPosts ... ← 新規追加 Function Get-FBRawData ... Function New-FBConnection ... Function New-FBFeed ... ← 新規追加 Function Read-FBConnection ... Function Write-FBConnection ...

ここまではOKでしょうか?

では Facebook に接続してみます。細かな理屈は追って解説します。

PS C:\> New-FBConnection

すると、Facebook へのログオン画面が表示されるのでログオンしましょう。

image

ユーザーの認証が完了すると、今度は以下の画面が表示されます。これはアプリケーションに自分自身のデータへのアクセスを認可する画面です。

image

ここで[許可する]をクリックすれば、以降、コマンドレットから Facebook 上に保存されている自分のデータにアクセスすることができます。

[拒否]すれば、もちろんアクセスできません。

Facebook から見ると、「Test_Application_jonn_msft」というアプリケーションに対して認可するように見えています。jonn とは、この Facebook PowerShell Module の作者です。

[許可する] をクリックすると、OAuth2 による認可プロセスが処理され、Facebook からアプリケーション(この場合は Facebook Powershell Module)に対して「アクセストークン」が返されます。

PS C:\> New-FBConnection

AccessToken --------------- 99999999999999|de66c7d65c96d39cd580aaa.xxxxxxxxxxxxxxxxxxxxxx... 

「アクセストークン」とは、Facebook Powershell Module がユーザーの情報にアクセスするためのチケットのようなものです。このアクセストークンが無いと、ユーザー情報にはアクセスできません。

アクセストークンは %LOCALAPPDATA%\FacebookPowerShellModule_CachedToken.txt というファイル内に生テキストで保存されます。このファイルが流出すると他のプログラムから自分自身の情報にアクセスできてしまうので、くれぐれも取扱いには注意しましょう。

アクセストークンに関する詳細な解説は別の投稿で行うことにします。

さっそく ISE の画面から以下のコマンドレットを入力してみましょう。     

>Get-FBFriends |Sort-Object name

id name -- ---- 1000017xxxxxxxx Ai xxxxxxx 100xxxxxxx Aki xxxxxxxx 183xxxxxxx Akihiro xxxxxxxx 112xxxxxxx Akiko xxxxxxxx 105xxxxxxx Akiko xxxxxxxx 10000090xxxxxxx Akiko xxxxxxxx    ・                                   ・              

何をしているかは一目瞭然ですよね。自分の Facebook 上の友達(なんか悲しい表現だな..)の一覧を取得して表示しています。その際に、Sort-Object を使用して、nameでソートしています。

[id] とは Facebook 上の ID です。Facebook 上の一切のオブジェクト(ユーザー、写真、投稿したコメント、その他もろもろ)には必ず識別するための ID がついています。友達の詳細な情報を取得するときにも、この ID を使用します。

PowerShell なので、当然、こんなこともできます。便利ですね。

PS C:\> (Get-FBFriends).count 315

友達の ID を取得できることがわかったので、今度は特定の友達の詳細な情報を見てみましょう。先ほど取得した ID を使用します。

PS C:\> Get-FBObjectData -Id "100002xxxxxxxx"

relationship_status : Single id : 100002xxxxxxxxx last_name : Taro name : Yamada Taro bio : SI屋でコードを書きたいのにかけなくてうずうずしながら若さゆえの情熱を持て余す日々。この熱くほてった体を誰かしずめてぇぇぇぇ! first_name : Yamada link : https://www.facebook.com/profile.php?id=100002xxxxxxxxxx updated_time : 2011-04-21T15:11:27+0000 locale : ja_JP gender : male

結果を見ると、独身の日本人男性で、少々変○であることがわかります。また、最終更新日が4月21日と、最近ごぶさたなこともわかりますね。こうした情報は、「友達」だから見えるのであって、誰でも彼でも見えるわけではありません。

なお、Facebook のプロフィールにはもっとたくさんの情報を登録することができます。この方の場合は、必要最小限の情報のみが登録されているようです。

例えば、私の情報を参照すると以下のように表示されます。-Id に “me” と指定していますが、Facebook では自分自身(認証済ユーザー)は”me” で表現することができます。便利ですね。

PS C:\> Get-FBObjectData -Id me

verified : True gender : male last_name : Anno hometown : @{id=11274xxxxxxxxxx; name=Utsunomiya-shi, Tochigi, Japan} email : junichia@xxxxxxxxxx birthday : 10/02/1968 link : https://www.facebook.com/profile.php?id=72xxxxxxx religion : 八百万の神々 locale : ja_JP updated_time : 2011-07-13T11:57:21+0000 name : Junichi Anno id : 72xxxxxxx languages : @{id=109549852396760; name=Japanese} work : {@{position=; start_date=2007-04; end_date=0000-00; employer=}, @{start_date=1991-04; end_date=2007-04; employer=}} education : {@{school=; year=; type=High School}, @{school=; type=College; year=; concentration=}} political : 秘密 first_name : Junichi favorite_athletes : @{id=175405739162732; name=いません} location : @{id=108279402527734; name=Oyama-shi, Tochigi, Japan} timezone : 9 bio : 日本マイクロソフトでエバンジェリストをやってます。どうぞよろしくお願いいたします。

全ての友達の全てのプロフィールと一気に取得する...なんて場合には以下のように記述することもできます。一度友だち全員のプロフィールを確認して、うかつに「承認」してしまったことを後悔してみるのも悪くありません。

PS C:\> Get-FBFriends | Get-FBObjectData

さて、Facebook の醍醐味は、単に自分自身のプロフィールを登録するだけでなく、さまざまな付帯情報を管理できる点にあります。付帯情報とは、「友達」、「投稿」「好きな映画」「いいね!」などなど。これらはまとめて「Connection」と呼ばれています。

Connection には以下のようなタイプのデータがあります。

  • friends:友だち
  • home:ニュースフィード
  • feed:ウォール
  • likes:いいね
  • movies:映画
  • music:音楽
  • books:本
  • notes:ノート
  • permissions:プライバシー設定
  • photos:写真のタグ
  • albums:アルバム
  • videos:ビデオ
  • videos/uploaded:ウォールにアップロードしたビデオ
  • events:イベント
  • groups:グループ
  • checkins:チェックイン
  • television :テレビ
  • Games :ゲーム
  • Links :ウォールに投稿したリンク

これ以外にもまだあるはずですが、ちょっと時間が無いのでここまで。

Connectionタイプの情報を取得するには、Get-FBAssociation コマンドレットを使用します。

以下は、私が過去に「いいね!」したオブジェクトの一覧です。「いいね!」した日付順に並べています。

PS C:\> Get-FBAssociation -Id "me" -Type "likes" | Sort-Object created_time

id name created_time category -- ---- ------------ -------- 70424008437 Bing 2009-08-22T11:29:37+0000 Product/service 216311481960 Bill Gates 2010-01-19T23:19:28+0000 Business person 45043912843 The Official Microsoft MVP Community 2010-05-16T16:59:50+0000 Product/service 350065477608 Reading Books 2010-05-25T01:55:10+0000 Interest 109592195726412 Travel 2010-05-25T01:55:10+0000 Interest 115605528452545 New Technologies 2010-05-25T01:55:10+0000 Interest 105613102805639 Ancient Egypt 2010-05-25T01:55:11+0000 Interest 118998374823947 Agile_Cat 2010-10-26T06:16:51+0000 Website 167767416591965 Security-Talk by Cozax 2010-12-25T04:54:53+0000 Product/service 2231777543 Twitter 2011-01-07T09:53:58+0000 Application 129722657098394 パソナテック/エンジニアカフェ 2011-03-05T06:32:09+0000 Company 2345053339 Developer 2011-03-06T12:35:34+0000 Application 367560701743 Oasis Hotel in Luxor, Egypt 2011-04-10T02:16:50+0000 Hotel 186856198023415 インストールマニアックス 2011-04-24T23:22:20+0000 Product/service 162097640518419 cloud-girls-mix on Ustream 2011-04-24T23:28:45+0000 Website 126395117437023 Microsoft Developer Forum 2011 2011-05-19T06:51:11+0000 Software 185004258197188 Zero Day 2011-05-26T08:21:55+0000 Book 179334845437863 栃木県立宇都宮高等学校 2011-05-29T04:32:47+0000 School 147999988604983 WPdevday on Ustream 2011-06-08T04:30:48+0000 Website 115800991838559 ASUS Japan 2011-06-18T04:27:59+0000 Computers/technology 233115383381196 日本マイクロソフト UX チーム 2011-06-22T16:21:07+0000 Product/service 105787369511635 wp-arch on Ustream 2011-06-23T03:18:29+0000 Website 171192329606787 Microsoft Developer Forum 2011 Japan o... 2011-06-23T04:56:09+0000 Website 212572792111675 Tech Fielders セミナー on Ustream 2011-06-23T06:12:51+0000 Website 186400324743207 Imagine Cup Japan | イマジンカップジャパン 2011-06-30T05:01:46+0000 Community 198671676834275 宇都宮大学 2011-07-01T14:25:42+0000 University 102134986532994 Hideyuki Takano 2011-07-01T17:13:11+0000 Author 241912695820827 jazug-girls on Ustream 2011-07-09T07:08:05+0000 Website 107938752635074 日本マイクロソフト株式会社 ISV 2011-07-13T05:42:55+0000 Product/service 162171137156411 FB C# SDK 2011-07-13T05:48:25+0000 Product/service 179873125388138 Test Application jonn_msft 2011-07-13T08:11:44+0000 Application 164821313572981 ハングオーバー2 2011-07-13T10:48:44+0000 Movie 106879676011328 なんでも 2011-07-13T10:48:44+0000 Music 106310202730728 見ません 2011-07-13T10:50:00+0000 Tv 184363171581232 やりません 2011-07-13T10:50:01+0000 Games/toys 175405739162732 いません 2011-07-13T10:50:58+0000 Athlete                                 

この結果を見て気づいたのですが、プロフィールに指定した「本」や「映画」は「いいね!」としてマークされてるんですね。うかつに変なものは入れておけないですね。

もちろん、友達の「いいね!」も表示することができます。

ここで、「人」ではないものも触ってみましょう。上の一覧に、「日本マイクロソフトUXチーム」というのが表示されています。赤文字の部分です。

これは人ではなく、Facebookページです。もちろんこいつにも ID が付与されており、以下のようにして関連情報を収集することができます。

以下は、Facebook ページのウォールに投稿されたFeedを収集しています。

PS C:\> Get-FBAssociation -Id "233115383381196" -Type "feed"

id : 233115383381196_251158651576869 actions : {@{name=Comment; link=https://www.facebook.com/233115383381196/posts/251158651576869}, @{name=Like; link=https://www.facebook.com/233115383381196/posts/25                1158651576869}, @{name=@mswinux on Twitter; link=https://twitter.com/mswinux?utm_source=fb&utm_medium=fb&utm_campaign=mswinux&utm_content=910722076771696                65}} type : status created_time : 2011-07-13T09:11:21+0000 from : @{id=233115383381196; name=日本マイクロソフト UX チーム; category=Product/service} updated_time : 2011-07-13T09:11:21+0000 likes : @{id=146xxxxxxxx; name=Ryosuke xxxxxxxx} icon : https://photos-d.ak.fbcdn.net/photos-ak-snc1/v27562/23/2231777543/app_2_2231777543_9553.gif message : CLR/Hの勉強会でWindows Phone "Mango"とWPF系の話をします: マイクロソフトの田中達彦です。2011年7月16日(土)に、札幌で開催されるCLR/HでWindows PhoneとWPF/WPFリボン... https://bit.ly/qucu26 application : @{id=2231777543; name=Twitter}

・ ・ ・

上記の結果で、「likes」の行をご覧ください。これは、この投稿によせられた「いいね!」です。このようにして、投稿1つ1つからも関連した情報を引っ張ってくることができるのですね。

なお、Clear-FBConnection というコマンドレットはあるのですが、このバージョンでは Facebook からのログアウトがサポートされていません。よって、現時点では手動でログアウトする必要があります。

どうでしょう?

PowerShell が使えるとなると、Facebook が一気に身近なものに感じられますよね。

次回以降では、内部の動き、特に認証と認可まわりについて解説することにします。