objective-cのfacebookSDKで友達の写真を取得する方法
ですます口調かいつも通りの話し方がいいのか毎回迷う僕です。
objective-cのfacebookSDKを使ってみた。
友達の中で最新の写真をフィードっぽく流す…ってのをやりたかったんで、それについてやってみた。
ほとんどHackbookのdemoを参考にしてるんで、参考にするといいかも。(色々すっ飛ばします)
初めはこんな風に自分の情報をまずとっていた[facebook requestWithGraphPath:@"me" andDelegate:self];
これだと@以降に色々設定するのめんどいなーとか思ってた。
そしたらFQLと言われるsql構文を使ってデータを引き出す方法があるなんて…
mysqlとか使った事が有る人にとっては喜ばしいことです。ほんとに。
さきほどのソースコードは
NSMutableDictionary * params =
[NSMutableDictionarydictionaryWithObjectsAndKeys:
@"SELECT uid,name,pic FROM user WHERE uid=me()",
@"query",nil];
AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[facebook requestWithMethodName:@"fql.query"
andParams:params
andHttpMethod:@"GET"
andDelegate:self];
こんな風に表す事が出来る。
さっそく友達たちの写真を取得して時系列に表示しようと思った所…
http://saruzaurus.blogspot.jp/2009/06/facebook-fql.html
この方の記事にも書いてある通り、WHEREを記述する必要が有り、ちょっと厄介そう…。
まず友達のIDを取得する必要がある。ここにかいてある通り
SELECT uid2 FROM friend WHERE uid1 = me() で友達のidを取得出来る。
次は友達のアルバムを取得するために
SELECT aid FROM album WHERE owner = uid2 をする必要が有る。
この時 SELECT aid FROM album WHERE owner IN (SELECT uid2 FROM friend WHERE uid1 = me()) を行なう事で、すべての友達のすべてのアルバムを取得する事が出来る。ただ、最新の情報ぐらいでいいかなぁと思い、まずは
SELECT aid FROM album WHERE owner IN (SELECT uid2 FROM friend WHERE uid1 = me()) ORDER BY modified DESC;
とする。ORDER BY modified DESC は変更した日付を降順で表示するって意味。
そして、そこから写真を取り出すには
SELECT src FROM photo WHERE aid= を行なう必要が有る。
先ほどの友達のアルバムのidを取得する奴と合わせて…
SELECT src FROM photo WHERE aid IN (SELECT aid FROM album WHERE owner IN (SELECT uid2 FROM friend WHERE uid1 = me()) ORDER BY modified DESC)とする。そしてさらにさらにまたmodifiedでソートして、とりあえず50枚とれればいいから…
SELECT src FROM photo WHERE aid IN (SELECT aid FROM album WHERE owner IN (SELECT uid2 FROM friend WHERE uid1 = me()) ORDER BY modified DESC) ORDER BY modified DESC LIMIT 50;
で出来上がり!!なんか長過ぎ、怪しすぎ…。
こんな感じで友達達の写真の最新情報を取得が出来た…はず!!!
あ、permissionの変更も忘れずに!
NSArray *permissions = [[NSArrayarrayWithObjects:@"user_about_me",@"publish_stream",@"user_photos",@"friends_about_me",@"friends_photos", nil]retain];