【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                :
http://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              :
http://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=
http://www.facebook.com/233115383381196/posts/251158651576869}, @{name=Like; link=http://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         :
http://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リボン... http://bit.ly/qucu26
application  : @{id=2231777543; name=Twitter}



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

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

どうでしょう?

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

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

Comments (2)

  1. 匿名 より:

    Set-ExecutionPolicy RemoteSigned

    としないと、インポートが出来ないってのを知らず、苦戦していました。

    検索で、でてきたんですがとりあえずインポートできたので、次のステップに挑戦します!

  2. Jon Newman より:

    Junichi, I’m impressed by what you have done here. I read the Google Translate version of your posting and you seem to be right on as far as I can tell (the automated translation is pretty wobbly). You might want to update to the latest version which fixes the windowsize issue you identify, plus adds an MSI installer and makes other improvements. Because this is an alpha version, cmdlet names, signatures etc. are subject to change.

    The big thing I want is to get real-world scenarios to guide future development. Can you encourage readers of your blog to step up on facebookpsmodule.codeplex.com/discussions and talk about how they would use this tool? I will try to help anyone who provides a business scenario.

Skip to main content