【PowerShell】Facebook の”友達リクエスト”一覧を取得する


たったいま、Tech Party のセッションが終わりました。いろんな意味で終わりましたorz

【IPv6コミュニティ勉強会のご案内】
2011年10月15日  マイクロソフト品川オフィス にて
詳細は 「IPv6勉強会」オフィシャルページ

さて、先日以下の投稿をしました。

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

これをさらに使いこんでみよう!ということで、今回は自分への「友達リクエスト」を取得してみます。

「友達リクエスト」を PowerShell で取得するには、PowerShell に対して「友達リクエストにアクセス」ための特権(Permissions)が必要です。Facebook では何をするにも情報にアクセスするための特権が必要で、事前にアプリケーションに与えておく必要があります。各特権の識別子は、Facebook の SDK で厳密に決められています。

https://developers.facebook.com/docs/reference/api/permissions/

「友達のリクエストにアクセスする特権」は「read_requests」です。

先日ご紹介した Facebook PowerShell Module は規定では友達リクエストにアクセスすることができません。理由はもちろん、「read_requests」を与えていないからです。

そこで、Facebook PowerShell Module に read_requests 特権を与えてみます。

%UserProfile%\Documents\WindowsPowerShell\Modules\Facebook 配下の「Facebook.ps1」をメモ帳で開いて、以下を追記しましょう。



[string[]]$global:FB_DefaultExtendedPermissions = @(
"user_about_me",
"friends_about_me",
"user_events",
"friends_events",
"user_groups",


"user_education_history",
"user_likes",
"read_requests" ←これを追記する
)

追記したら保存して、PowerSell ISE を起動し、facebook module を読み込みましょう。

PS C:\> Import-Module facebook

さらに、Facebook へのコネクションを張ります。

PS C:\> New-FBConnection

ログオンしていなければ、以下のようにログオン画面が表示されます。

image

ログオンが完了すると、ユーザー情報にアクセスするための特権の承認画面が表示されます。

既に、過去に Facebook PowerShell Module を使用したことがあれば、以下のように追加した特権だけを承認する画面が表示されるはずです。

image

「許可する」をクリックすれば、Facebook PowerShell Module に友達リクエストにアクセスするための特権が与えらえます。

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

さっそく友達リクエストを取得してみましょう。

以下のスクリプトを実行してみてください(汚いスクリプトですみません)。

$query = "SELECT uid_from FROM friend_request WHERE uid_to=me()"
$Requests = $(Get-FBConnection).query( $query )
$Requests = $Requests.ToString()
$Requests = $Requests.Replace("[","")
$Requests = $Requests.Replace("{","")
$Requests = $Requests.Replace("}","")
$Requests = $Requests.Replace("]","")
$Requests = $Requests.Split(",")
Foreach ($e in $Requests) {
    $uid_from = (($e.Split(":"))[1]).Replace("""","")
    $query = "select name from user where uid = ‘$uid_from’"
    $(Get-FBConnection).query( $query )
    }

リクエストがあれば、以下のような結果が戻ってくるはずです。
※ご協力いただいた皆様、感謝です!心より感謝しつつ承認しちゃいました。

Key                                      Value                                 
—                                        —–
name                                    Yoshiko Honma                         
name                                    Maki  Tokutake                        
name                                    Ichiro Ota                            
name                                    Tomoyuki Hirase                       
name                                    Kishima Masakazu

上記のスクリプトについて簡単に解説しておきましょう。

1行目はクエリーを作成している文字列です。SELECT  ~ で始まっている通り、クエリーであることがわかります。これは、Facebook の情報にアクセスするためのクエリーで、Facebook Query Language(FQL)と呼ばれています。

Facebook Query Language (FQL) – Facebook Developers

考え方は、SQL とほぼ同じです。今回は、friend_request テーブルから uid_to が me の条件に合致するレコードを取得しています。

uid_to とはリクエストの送信先であり、値には当然「私自身」を指定します。「私自身」は「me」と表現することができます。

2行目ではクエリーを実行しています。Get-FBConnection コマンドレットで現在ログオンしているユーザーのセッションを取得し、それに対して Query メソッドを実行することでクエリーを実行できます。

以下は、$(Get-FBConnection) のメンバーを取得したものです。Query 以外にも、Get や Put などのメソッドが提供されていることがわかります。

PS C:\> $(Get-FBConnection) |get-member

TypeName: Facebook.FacebookClient

Name            MemberType Definition                                         
—-            ———- ———-                                         
DeleteCompleted Event      System.EventHandler`1[Facebook.FacebookApiEventAr…
GetCompleted    Event      System.EventHandler`1[Facebook.FacebookApiEventAr…
PostCompleted   Event      System.EventHandler`1[Facebook.FacebookApiEventAr…
Batch           Method     System.Object Batch(Params Facebook.FacebookBatch…
BatchAsync      Method     System.Void BatchAsync(Facebook.FacebookBatchPara…
Delete          Method     System.Object Delete(string path), System.Object …
DeleteAsync     Method     System.Void DeleteAsync(string path), System.Void…
Equals          Method     bool Equals(System.Object obj)                     
Get             Method     System.Object Get(string path), System.Object Get…
GetAsync       Method     System.Void GetAsync(string path), System.Void Ge…
GetHashCode    Method     int GetHashCode()                                  
GetType         Method     type GetType()                                     
Post            Method     System.Object Post(string path, System.Collection…
PostAsync      Method     System.Void PostAsync(string path, System.Collect…
Query           Method     System.Object Query(string fql), System.Object Qu…
QueryAsync      Method     System.Void QueryAsync(string fql), System.Void Q…
ToString        Method     string ToString()                                  
AccessToken     Property   System.String AccessToken {get;set;}               
UseFacebookBeta Property   System.Boolean UseFacebookBeta {get;set;}
 

メソッドには Query だけでなく、Put も用意されているので、Feed に投稿したりメッセージを送ったり…なんてことも可能です。

下から3行目をご覧ください。ここにもクエリーが書かれています。

これは、friend_request テーブルには name が格納されていないので、取得してきた uid を使って user テーブルを検索しています。

ただ、残念ながら 友達リクエストを自動承認する方法がどうしてもみつからず…ある事例では JavaScript で「承認する」ボタンを押す..なんてものがあったりしましたが…。

…なのできちんと友達かどうかを吟味し、問題ないことを確認してから手動で「承認」する必要があります。

Facebook は今後企業のシステムの一部と化する可能性があります。そんなとき、IT Pro はこうしたコマンドレットを駆使して Facebook の情報を収集したり、逆にFacebookに投稿したりといったテクニックが求められるでしょう。

Comments (0)

Skip to main content