1
0
Fork 0
mirror of https://github.com/nov/fb_graph2 synced 2023-03-27 23:22:15 -04:00

cached likes & comments, and more tests

This commit is contained in:
nov 2014-05-30 15:28:34 +09:00
parent 6a04c2a9e8
commit ffae61e531
15 changed files with 1024 additions and 9 deletions

View file

@ -1,8 +1,19 @@
module FbGraph2
class Edge
module Comments
def initialize(id, attributes)
super
if attributes.include?(:comments)
@_cached_comments = Collection.new attributes[:comments]
end
end
def comments(params = {})
comments = self.edge :comments, params
comments = if @_cached_comments.present? && params.blank?
@_cached_comments
else
self.edge :comments, params
end
comments.collect do |comment|
Comment.new(comment[:id], comment).authenticate self.access_token
end

View file

@ -16,8 +16,19 @@ module FbGraph2
end
module LikeeContext
def initialize(id, attributes)
super
if attributes.include?(:likes)
@_cached_likes = Collection.new attributes[:likes]
end
end
def likes(params = {})
users = self.edge :likes, params
users = if @_cached_likes.present? && params.blank?
@_cached_likes
else
self.edge :likes, params
end
users.collect do |user|
User.new(user[:id], user).authenticate self.access_token
end

View file

@ -1,5 +1,8 @@
module FbGraph2
class Photo < Node
include Edge::Comments
include Edge::Likes::LikeeContext
register_attributes(
raw: [
:backdated_time_granularity, :height, :icon, :link, :name, :page_story_id, :picture, :position, :source, :width,

View file

@ -1,5 +1,6 @@
module FbGraph2
class Post < Node
include Edge::Comments
include Edge::Likes::LikeeContext
register_attributes(

View file

@ -4,14 +4,16 @@ describe FbGraph2::Edge::Accounts do
context 'included in User' do
describe '#accounts' do
let(:me) { FbGraph2::User.me('token') }
it 'should return pages with page token' do
it 'should return an Array of FbGraph2::Page with page token' do
accounts = mock_graph :get, 'me/accounts', 'user/accounts', access_token: 'token' do
me.accounts
end
account = accounts.first
account.should be_instance_of FbGraph2::Page
account.name.should == 'Identity Conference #idcon'
account.access_token.should == 'page_token'
accounts.should_not be_blank
accounts.each do |account|
account.should be_instance_of FbGraph2::Page
account.access_token.should == 'page_token'
end
accounts.first.name.should == 'Identity Conference #idcon'
end
end
end

View file

@ -0,0 +1,33 @@
require 'spec_helper'
describe FbGraph2::Edge::Comments do
context 'included in Post' do
let(:post) { FbGraph2::Post.new('post_id').authenticate('token') }
describe '#comments' do
context 'when cached' do
let(:fetched) do
mock_graph :get, 'post_id', 'post/liked_and_commented', access_token: 'token' do
post.fetch
end
end
context 'without params' do
it 'should not call API' do
expect do
fetched.comments
end.not_to request_to "#{fetched.id}/comments"
end
end
context 'with params' do
it 'should call API' do
expect do
fetched.comments no_cache: true
end.to request_to "#{fetched.id}/comments"
end
end
end
end
end
end

View file

@ -5,7 +5,15 @@ describe FbGraph2::Edge::Feed do
let(:me) { FbGraph2::User.me('token') }
describe '#feed' do
it :TODO
it 'should return an Array of FbGraph2::Post' do
posts = mock_graph :get, 'me/feed', 'user/feed', access_token: 'token' do
me.feed
end
posts.should_not be_blank
posts.each do |post|
post.should be_instance_of FbGraph2::Post
end
end
end
describe 'feed!' do

View file

@ -0,0 +1,33 @@
require 'spec_helper'
describe FbGraph2::Edge::Likes do
context 'included in Post' do
let(:post) { FbGraph2::Post.new('post_id').authenticate('token') }
describe '#comments' do
context 'when cached' do
let(:fetched) do
mock_graph :get, 'post_id', 'post/liked_and_commented', access_token: 'token' do
post.fetch
end
end
context 'without params' do
it 'should not call API' do
expect do
fetched.likes
end.not_to request_to "#{fetched.id}/likes"
end
end
context 'with params' do
it 'should call API' do
expect do
fetched.likes no_cache: true
end.to request_to "#{fetched.id}/likes"
end
end
end
end
end
end

View file

@ -0,0 +1,29 @@
require 'spec_helper'
describe FbGraph2::Edge::Photos do
context 'included in User' do
let(:me) { FbGraph2::User.me('token') }
describe '#photos' do
it 'should return an Array of FbGraph2::Photo' do
photos = mock_graph :get, 'me/photos', 'user/photos', access_token: 'token' do
me.photos
end
photos.should_not be_blank
photos.each do |photo|
photo.should be_instance_of FbGraph2::Photo
end
end
end
describe 'photo!' do
it 'should return FbGraph2::Post' do
photo = mock_graph :post, 'me/photos', 'success_with_id', access_token: 'token' do
me.photo! url: 'http://example.com/me.png'
end
photo.should be_instance_of FbGraph2::Photo
photo.id.should == 'created_object_id'
end
end
end
end

View file

@ -34,6 +34,14 @@ describe FbGraph2::Node do
its(:access_token) { should == 'access_token' }
end
describe '#destroy' do
it 'should call API with DELETE method' do
expect do
instance.destroy
end.to request_to 'identifier', :delete
end
end
describe '#handle_response' do
context 'when error' do
context 'when valid json' do

View file

@ -0,0 +1,59 @@
{
"id": "579612276_10152473646047277",
"from": {
"id": "579612276",
"name": "Nov Matake"
},
"message": "test",
"actions": [{
"name": "Comment",
"link": "https://www.facebook.com/579612276/posts/10152473646047277"
}, {
"name": "Like",
"link": "https://www.facebook.com/579612276/posts/10152473646047277"
}],
"privacy": {
"description": "Your friends",
"value": "ALL_FRIENDS",
"friends": "",
"networks": "",
"allow": "",
"deny": ""
},
"type": "status",
"status_type": "mobile_status_update",
"created_time": "2014-05-30T06:13:26+0000",
"updated_time": "2014-05-30T06:13:30+0000",
"likes": {
"data": [{
"id": "579612276",
"name": "Nov Matake"
}],
"paging": {
"cursors": {
"after": "NTc5NjEyMjc2",
"before": "NTc5NjEyMjc2"
}
}
},
"comments": {
"data": [{
"id": "10152473646047277_10152473646112277",
"from": {
"id": "579612276",
"name": "Nov Matake"
},
"message": "test",
"can_remove": true,
"created_time": "2014-05-30T06:13:30+0000",
"like_count": 0,
"user_likes": false
}],
"paging": {
"cursors": {
"after": "MQ==",
"before": "MQ=="
}
}
}
}

1
spec/mock_json/true.json Normal file
View file

@ -0,0 +1 @@
true

View file

@ -14,7 +14,7 @@
}, {
"category": "Non-profit organization",
"name": "OpenID Foundation Japan",
"access_token": "access_token",
"access_token": "page_token",
"perms": ["ADMINISTER", "EDIT_PROFILE", "CREATE_CONTENT", "MODERATE_CONTENT", "CREATE_ADS", "BASIC_ADMIN"],
"id": "157574337644417"
}],

View file

@ -0,0 +1,274 @@
{
"data": [{
"id": "579612276_10152473214157277",
"from": {
"id": "579612276",
"name": "Nov Matake"
},
"story": "Nov Matake likes a photo.",
"story_tags": {
"0": [{
"id": "579612276",
"name": "Nov Matake",
"offset": 0,
"length": 10,
"type": "user"
}]
},
"privacy": {
"value": ""
},
"type": "status",
"created_time": "2014-05-30T00:41:24+0000",
"updated_time": "2014-05-30T00:41:24+0000"
}, {
"id": "579612276_10152473191982277",
"from": {
"id": "579612276",
"name": "Nov Matake"
},
"message": "ビッグデータとひわいっち",
"story": "Nov Matake shared Keisuke Hiwatashi's photo.",
"story_tags": {
"0": [{
"id": "579612276",
"name": "Nov Matake",
"offset": 0,
"length": 10,
"type": "user"
}],
"18": [{
"id": "674146975973023",
"name": "Keisuke Hiwatashi",
"offset": 18,
"length": 17,
"type": "user"
}]
},
"picture": "https://fbcdn-photos-h-a.akamaihd.net/hphotos-ak-xfp1/t1.0-0/10325169_677983408922713_1895639973177548237_s.jpg",
"link": "https://www.facebook.com/photo.php?fbid=677983408922713&set=a.150687431652316.43478.100001331809083&type=1",
"name": "Mobile Uploads",
"caption": "西日本新聞の三面広告に。角川書店さんありがとう^ ^\n\n今晩はグロービス東京で講演です。 — at ANA 福岡空港 - Fukuoka Airport.",
"properties": [{
"name": "By",
"text": "Keisuke Hiwatashi",
"href": "https://www.facebook.com/keisuke.hiwatashi.9"
}],
"icon": "https://fbstatic-a.akamaihd.net/rsrc.php/v2/yD/r/aS8ecmYRys0.gif",
"actions": [{
"name": "Comment",
"link": "https://www.facebook.com/579612276/posts/10152473191982277"
}, {
"name": "Like",
"link": "https://www.facebook.com/579612276/posts/10152473191982277"
}],
"privacy": {
"description": "Your friends",
"value": "ALL_FRIENDS",
"friends": "",
"networks": "",
"allow": "",
"deny": ""
},
"type": "photo",
"status_type": "shared_story",
"object_id": "677983408922713",
"application": {
"name": "Facebook for iPhone",
"namespace": "fbiphone",
"id": "6628568379"
},
"created_time": "2014-05-30T00:21:08+0000",
"updated_time": "2014-05-30T00:21:08+0000"
}, {
"id": "579612276_10152473186437277",
"from": {
"id": "579612276",
"name": "Nov Matake"
},
"story": "Nov Matake shared a link.",
"story_tags": {
"0": [{
"id": "579612276",
"name": "Nov Matake",
"offset": 0,
"length": 10,
"type": "user"
}]
},
"picture": "https://fbexternal-a.akamaihd.net/safe_image.php?d=AQAcHDji1ec2KqYZ&w=154&h=154&url=http%3A%2F%2Fua.nakanohito.jp%2Fua%2F%3Ffrom%3Duamb%26id%3D7932754%26mode%3Ddefault%26h%3D55529355%26rand%3Dnoscript%26guid%3DON%26url%3Dhttp%3A%2F%2Fkirik.tea-nifty.com%2Fdiary%2F2014%2F05%2Fivs-ed80.html%26eflg%3D1",
"link": "http://ow.ly/xoEJp",
"name": "IVS札幌でセクハラ・レイプ未遂騒ぎが勃発インサイダー情報が乱舞: やまもといちろうBLOGブログ",
"caption": "kirik.tea-nifty.com",
"description": " 毎回いろんな乱痴気騒ぎを起こすIVSインフィニティー ベンチャーズ サミット)ですが、さすがに今回は警察沙汰に近い状況になったようなのでピックアップするわけですけど。",
"icon": "https://fbstatic-a.akamaihd.net/rsrc.php/v2/yD/r/aS8ecmYRys0.gif",
"actions": [{
"name": "Comment",
"link": "https://www.facebook.com/579612276/posts/10152473186437277"
}, {
"name": "Like",
"link": "https://www.facebook.com/579612276/posts/10152473186437277"
}],
"privacy": {
"description": "Your friends",
"value": "ALL_FRIENDS",
"friends": "",
"networks": "",
"allow": "",
"deny": ""
},
"type": "link",
"status_type": "shared_story",
"application": {
"name": "Facebook for iPhone",
"namespace": "fbiphone",
"id": "6628568379"
},
"created_time": "2014-05-30T00:15:34+0000",
"updated_time": "2014-05-30T00:15:34+0000",
"shares": {
"count": 1
},
"likes": {
"data": [{
"id": "689134294485152",
"name": "Shunya Iriki"
}, {
"id": "1486426304903512",
"name": "Masato Nagai"
}],
"paging": {
"cursors": {
"after": "MTQ4NjQyNjMwNDkwMzUxMg==",
"before": "Njg5MTM0Mjk0NDg1MTUy"
}
}
}
}, {
"id": "579612276_10152471638637277",
"from": {
"id": "579612276",
"name": "Nov Matake"
},
"message": "じわじわくる",
"story": "Nov Matake shared Yoichi Hagiwara's photo.",
"story_tags": {
"0": [{
"id": "579612276",
"name": "Nov Matake",
"offset": 0,
"length": 10,
"type": "user"
}],
"18": [{
"id": "636860593058872",
"name": "Yoichi Hagiwara",
"offset": 18,
"length": 15,
"type": "user"
}]
},
"picture": "https://fbcdn-photos-b-a.akamaihd.net/hphotos-ak-xfp1/t1.0-0/10410479_636298869781711_8967036710690476822_s.jpg",
"link": "https://www.facebook.com/photo.php?fbid=636298869781711&set=a.168178316593771.41312.100002048127511&type=1",
"name": "Timeline Photos",
"caption": "辛口パネルディスカッション — with Kazu Yamaji and Koji Ando.",
"properties": [{
"name": "By",
"text": "Yoichi Hagiwara",
"href": "https://www.facebook.com/yoichi.hagiwara.98"
}],
"icon": "https://fbstatic-a.akamaihd.net/rsrc.php/v2/yD/r/aS8ecmYRys0.gif",
"actions": [{
"name": "Comment",
"link": "https://www.facebook.com/579612276/posts/10152471638637277"
}, {
"name": "Like",
"link": "https://www.facebook.com/579612276/posts/10152471638637277"
}],
"privacy": {
"description": "Your friends",
"value": "ALL_FRIENDS",
"friends": "",
"networks": "",
"allow": "",
"deny": ""
},
"type": "photo",
"status_type": "shared_story",
"object_id": "636298869781711",
"application": {
"name": "Photos",
"id": "2305272732"
},
"created_time": "2014-05-29T08:30:07+0000",
"updated_time": "2014-05-29T08:30:07+0000"
}, {
"id": "579612276_10152470156827277",
"from": {
"id": "579612276",
"name": "Nov Matake"
},
"story": "Nov Matake shared a link.",
"story_tags": {
"0": [{
"id": "579612276",
"name": "Nov Matake",
"offset": 0,
"length": 10,
"type": "user"
}]
},
"picture": "https://fbexternal-a.akamaihd.net/safe_image.php?d=AQDQyx3PnnIPoGqZ&w=154&h=154&url=http%3A%2F%2Fc002.ocn.ne.jp%2Fimg%2Flogo_nttcommunications_001.gif",
"link": "http://mypage.ocn.ne.jp/sorry/index.html",
"name": "お詫び | マイページ",
"caption": "mypage.ocn.ne.jp",
"description": "NTTコミュニケーションズでは、多くの方に当社ホームページを利用していただくため、アクセシビリティに配慮したホームページの制作を行っております。 アクセシビリティの実装方法としてスタイルシートを使用しております。お客さまが使用されているブラウザはスタイルシート非対応のブラウザのため、表示結果が異なっておりますが、情報そのものは問題なくご利用いただけます。",
"icon": "https://fbstatic-a.akamaihd.net/rsrc.php/v2/yD/r/aS8ecmYRys0.gif",
"actions": [{
"name": "Comment",
"link": "https://www.facebook.com/579612276/posts/10152470156827277"
}, {
"name": "Like",
"link": "https://www.facebook.com/579612276/posts/10152470156827277"
}],
"privacy": {
"description": "Your friends",
"value": "ALL_FRIENDS",
"friends": "",
"networks": "",
"allow": "",
"deny": ""
},
"type": "link",
"status_type": "shared_story",
"application": {
"name": "Facebook for iPhone",
"namespace": "fbiphone",
"id": "6628568379"
},
"created_time": "2014-05-28T15:25:07+0000",
"updated_time": "2014-05-28T15:25:07+0000",
"likes": {
"data": [{
"id": "644436712303508",
"name": "Masaru Kurahayashi"
}, {
"id": "10203901352238213",
"name": "Shuji Yamaguchi"
}, {
"id": "10203023651344197",
"name": "Atsuyoshi Shimazu"
}],
"paging": {
"cursors": {
"after": "MTAyMDMwMjM2NTEzNDQxOTc=",
"before": "NjQ0NDM2NzEyMzAzNTA4"
}
}
}
}],
"paging": {
"previous": "https://graph.facebook.com/v2.0/579612276/feed?limit=25&since=1401410484",
"next": "https://graph.facebook.com/v2.0/579612276/feed?limit=25&until=1400651347"
}
}

View file

@ -0,0 +1,542 @@
{
"data": [{
"id": "10200941627421315",
"from": {
"id": "10201136131123786",
"name": "Tatsuya Katsuhara"
},
"name": "ID厨が白秋で肉をくらう。",
"picture": "https://fbcdn-photos-b-a.akamaihd.net/hphotos-ak-xpf1/t1.0-0/1531597_10200941627421315_1173228419_s.jpg",
"source": "https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-xpf1/t1.0-9/s720x720/1531597_10200941627421315_1173228419_n.jpg",
"height": 540,
"width": 720,
"images": [{
"height": 720,
"width": 960,
"source": "https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-xpf1/t1.0-9/1531597_10200941627421315_1173228419_n.jpg"
}, {
"height": 600,
"width": 800,
"source": "https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-xpf1/t1.0-9/p600x600/1531597_10200941627421315_1173228419_n.jpg"
}, {
"height": 480,
"width": 640,
"source": "https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-xpf1/t1.0-9/p480x480/1531597_10200941627421315_1173228419_n.jpg"
}, {
"height": 320,
"width": 426,
"source": "https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-xpf1/t1.0-9/p320x320/1531597_10200941627421315_1173228419_n.jpg"
}, {
"height": 540,
"width": 720,
"source": "https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-xpf1/t1.0-9/p180x540/1531597_10200941627421315_1173228419_n.jpg"
}, {
"height": 130,
"width": 173,
"source": "https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-xpf1/t1.0-9/p130x130/1531597_10200941627421315_1173228419_n.jpg"
}, {
"height": 225,
"width": 300,
"source": "https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-xpf1/t1.0-9/p75x225/1531597_10200941627421315_1173228419_n.jpg"
}],
"link": "https://www.facebook.com/photo.php?fbid=10200941627421315&set=p.10200941627421315&type=1",
"icon": "https://fbstatic-a.akamaihd.net/rsrc.php/v2/yz/r/StEh3RhPvjk.gif",
"place": {
"id": "469658423073776",
"name": "白秋",
"location": {
"city": "Shibuya-ku",
"country": "Japan",
"latitude": 35.6563466826,
"longitude": 139.700998939,
"state": "Tokyo"
}
},
"created_time": "2014-03-26T13:05:18+0000",
"updated_time": "2014-03-26T13:20:56+0000",
"tags": {
"data": [{
"id": "585838138182211",
"name": "Teruko Kaneshiro",
"created_time": "2014-03-26T13:05:18+0000",
"x": 44.84375,
"y": 42.083335876465
}, {
"id": "644436712303508",
"name": "Masaru Kurahayashi",
"created_time": "2014-03-26T13:05:18+0000",
"x": 59.0625,
"y": 35.416667938232
}, {
"id": "10201136131123786",
"name": "Tatsuya Katsuhara",
"created_time": "2014-03-26T13:05:18+0000",
"x": 50,
"y": 85.83332824707
}, {
"id": "10203204372262716",
"name": "Ryo Ito",
"created_time": "2014-03-26T13:05:18+0000",
"x": 35.46875,
"y": 39.166667938232
}, {
"id": "10152167763779825",
"name": "Hayashi Tatsuya",
"created_time": "2014-03-26T13:05:18+0000",
"x": 74.6875,
"y": 39.583335876465
}, {
"id": "579612276",
"name": "Nov Matake",
"created_time": "2014-03-26T13:05:18+0000",
"x": 29.062503814697,
"y": 43.333332061768
}, {
"id": "10152436694196416",
"name": "Shingo Yamanaka",
"created_time": "2014-03-26T13:05:18+0000",
"x": 83.125,
"y": 36.458335876465
}, {
"id": "10152447963434621",
"name": "Tatsuo Kudo",
"created_time": "2014-03-26T13:05:18+0000",
"x": 51.718746185303,
"y": 38.333335876465
}],
"paging": {
"cursors": {
"before": "NTg1ODM4MTM4MTgyMjEx",
"after": "MTAxNTI0NDc5NjM0MzQ2MjE="
}
}
},
"comments": {
"data": [{
"id": "10200941627421315_2590723",
"can_remove": false,
"created_time": "2014-03-26T17:19:38+0000",
"from": {
"name": "Toru Yamaguchi",
"id": "10152396860921912"
},
"like_count": 2,
"message": "呼ばれてないw",
"user_likes": true
}, {
"id": "10200941627421315_2591238",
"can_remove": false,
"created_time": "2014-03-26T23:10:01+0000",
"from": {
"name": "Tatsuya Katsuhara",
"id": "10201136131123786"
},
"like_count": 2,
"message": "僕も呼ばれてないw(通りがかっただけ)\n\nファウンデーションのページに顔写真が乗ってる人が対象とのこと。",
"user_likes": false
}, {
"id": "10200941627421315_2591277",
"can_remove": true,
"created_time": "2014-03-26T23:41:55+0000",
"from": {
"name": "Nov Matake",
"id": "579612276"
},
"like_count": 2,
"message": "あ!!ネコの人の横顔が!!(((( ;゚Д゚)))",
"user_likes": false
}, {
"id": "10200941627421315_2591624",
"can_remove": false,
"created_time": "2014-03-27T03:59:55+0000",
"from": {
"name": "Tatsuya Katsuhara",
"id": "10201136131123786"
},
"like_count": 0,
"message": "顔だしNGでしたっけ",
"user_likes": false
}, {
"id": "10200941627421315_2591626",
"can_remove": false,
"created_time": "2014-03-27T04:00:40+0000",
"from": {
"name": "Ryo Ito",
"id": "10203204372262716"
},
"like_count": 2,
"message": "日本海に沈められたいようですね?",
"user_likes": false
}, {
"id": "10200941627421315_2591628",
"can_remove": false,
"created_time": "2014-03-27T04:01:36+0000",
"from": {
"name": "Tatsuya Katsuhara",
"id": "10201136131123786"
},
"like_count": 1,
"message": "まぁほとんど見えてないし、なんか「シェー」してるし。",
"user_likes": false
}, {
"id": "10200941627421315_2591630",
"can_remove": false,
"created_time": "2014-03-27T04:03:14+0000",
"from": {
"name": "Tatsuo Kudo",
"id": "10152447963434621"
},
"like_count": 1,
"message": "タグ消して早く逃げて!",
"user_likes": false
}],
"paging": {
"cursors": {
"before": "MQ==",
"after": "Nw=="
}
}
},
"likes": {
"data": [{
"id": "685453561525864",
"name": "Hiromitsu Iida"
}, {
"id": "753788224652550",
"name": "Satoshi Watanabe"
}, {
"id": "657700260978684",
"name": "Kaori Miyata"
}, {
"id": "10201584212239941",
"name": "Takashi Kawasaki"
}, {
"id": "449004711910751",
"name": "Sachiko Notsu"
}, {
"id": "471770689635333",
"name": "田辺 めぐみ"
}, {
"id": "722691854464357",
"name": "Nobuyuki Ooka"
}, {
"id": "550421278399580",
"name": "Ayaya Maheno"
}, {
"id": "663823840353749",
"name": "Koji Asaga"
}, {
"id": "633899533370033",
"name": "Eiko Miyamae"
}, {
"id": "10203759427616991",
"name": "Takeshi Takahashi"
}, {
"id": "10204254221381580",
"name": "Aoi Ichiba"
}, {
"id": "10152851258997627",
"name": "Takashi Shitamichi"
}, {
"id": "732741390109869",
"name": "Rieko Suzuki"
}, {
"id": "10202979025649479",
"name": "Akiko Orita"
}, {
"id": "605588959556246",
"name": "Eduardo Casquejo Gerochi"
}, {
"id": "10152396860921912",
"name": "Toru Yamaguchi"
}, {
"id": "780799988617330",
"name": "Shota Kinoshita"
}, {
"id": "325116630972406",
"name": "津田千穂"
}, {
"id": "449822611820106",
"name": "Yoichiro Iizuka"
}, {
"id": "677203379011818",
"name": "Obata Masa"
}, {
"id": "10202834671282088",
"name": "Miki Tsujimoto"
}, {
"id": "647882965291683",
"name": "Yasuo Okabe"
}, {
"id": "644436712303508",
"name": "Masaru Kurahayashi"
}, {
"id": "523078074465377",
"name": "Keisuke Kagawa"
}],
"paging": {
"next": "https://graph.facebook.com/v2.0/10200941627421315/likes?pretty=1&limit=25&after=NTIzMDc4MDc0NDY1Mzc3",
"cursors": {
"before": "Njg1NDUzNTYxNTI1ODY0",
"after": "NTIzMDc4MDc0NDY1Mzc3"
}
}
}
}, {
"id": "10200841351194472",
"from": {
"id": "10201136131123786",
"name": "Tatsuya Katsuhara"
},
"name": "そのままmixiのラウンジで打ち上げ。",
"picture": "https://fbcdn-photos-a-a.akamaihd.net/hphotos-ak-xap1/t1.0-0/1897751_10200841351194472_1801438743_s.jpg",
"source": "https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-xap1/t1.0-9/s720x720/1897751_10200841351194472_1801438743_n.jpg",
"height": 540,
"width": 720,
"images": [{
"height": 720,
"width": 960,
"source": "https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-xap1/t1.0-9/1897751_10200841351194472_1801438743_n.jpg"
}, {
"height": 600,
"width": 800,
"source": "https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-xap1/t1.0-9/p600x600/1897751_10200841351194472_1801438743_n.jpg"
}, {
"height": 480,
"width": 640,
"source": "https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-xap1/t1.0-9/p480x480/1897751_10200841351194472_1801438743_n.jpg"
}, {
"height": 320,
"width": 426,
"source": "https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-xap1/t1.0-9/p320x320/1897751_10200841351194472_1801438743_n.jpg"
}, {
"height": 540,
"width": 720,
"source": "https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-xap1/t1.0-9/p180x540/1897751_10200841351194472_1801438743_n.jpg"
}, {
"height": 130,
"width": 173,
"source": "https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-xap1/t1.0-9/p130x130/1897751_10200841351194472_1801438743_n.jpg"
}, {
"height": 225,
"width": 300,
"source": "https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-xap1/t1.0-9/p75x225/1897751_10200841351194472_1801438743_n.jpg"
}],
"link": "https://www.facebook.com/photo.php?fbid=10200841351194472&set=p.10200841351194472&type=1",
"icon": "https://fbstatic-a.akamaihd.net/rsrc.php/v2/yz/r/StEh3RhPvjk.gif",
"place": {
"id": "203709096330380",
"name": "mixi",
"location": {
"city": "Shibuya-ku",
"country": "Japan",
"latitude": 35.658331169721,
"longitude": 139.70888632701,
"state": "Tokyo",
"street": "東1-2-20 住友不動産渋谷ファーストタワー7F",
"zip": "150-0011"
}
},
"created_time": "2014-03-07T14:25:30+0000",
"updated_time": "2014-03-07T14:25:31+0000",
"tags": {
"data": [{
"id": "10152447963434621",
"name": "Tatsuo Kudo",
"created_time": "2014-03-13T08:02:16+0000",
"x": 35.208333333333,
"y": 44.481481481482
}, {
"id": "572058479576285",
"name": "Satoshi Yagi",
"created_time": "2014-03-13T08:02:14+0000",
"x": 46.597222222222,
"y": 40.874074074074
}, {
"id": "677203379011818",
"name": "Obata Masa",
"created_time": "2014-03-13T07:56:48+0000",
"x": 65.98193359375,
"y": 28.95009803772
}, {
"id": "644436712303508",
"name": "Masaru Kurahayashi",
"created_time": "2014-03-13T07:56:46+0000",
"x": 39.027778625488,
"y": 44.674076080322
}, {
"id": "585838138182211",
"name": "Teruko Kaneshiro",
"created_time": "2014-03-07T14:26:31+0000",
"x": 62.777774810791,
"y": 46.237037658691
}, {
"id": "671955032839764",
"name": "Naohiro Fujie",
"created_time": "2014-03-07T14:26:31+0000",
"x": 52.499996185303,
"y": 45.62963104248
}, {
"id": "10201136131123786",
"name": "Tatsuya Katsuhara",
"created_time": "2014-03-07T14:25:31+0000",
"x": 24.446300506592,
"y": 37.896244049072
}, {
"id": "579612276",
"name": "Nov Matake",
"created_time": "2014-03-07T14:25:31+0000",
"x": 66.40796661377,
"y": 53.814094543457
}],
"paging": {
"cursors": {
"before": "MTAxNTI0NDc5NjM0MzQ2MjE=",
"after": "NTc5NjEyMjc2"
}
}
},
"comments": {
"data": [{
"id": "10200841351194472_2557753",
"can_remove": false,
"created_time": "2014-03-07T23:38:10+0000",
"from": {
"name": "Ryo Ito",
"id": "10203204372262716"
},
"like_count": 0,
"message": "これは良い写真",
"user_likes": false
}, {
"id": "10200841351194472_2557794",
"can_remove": false,
"created_time": "2014-03-07T23:58:24+0000",
"from": {
"name": "Teruko Kaneshiro",
"id": "585838138182211"
},
"like_count": 2,
"message": "カメラマンが良かったんじゃない?笑",
"user_likes": false
}, {
"id": "10200841351194472_2558268",
"can_remove": false,
"created_time": "2014-03-08T05:49:32+0000",
"from": {
"name": "Satoshi Yagi",
"id": "572058479576285"
},
"like_count": 2,
"message": "なんか削除されてるw",
"user_likes": false
}, {
"id": "10200841351194472_2567175",
"can_remove": false,
"created_time": "2014-03-13T08:02:42+0000",
"from": {
"name": "Obata Masa",
"id": "677203379011818"
},
"like_count": 1,
"message": "楽しかったですね。\n八木さんと金城さんと富士榮さんが一つづつずれてます",
"user_likes": false
}],
"paging": {
"cursors": {
"before": "MQ==",
"after": "NA=="
}
}
},
"likes": {
"data": [{
"id": "1246364330",
"name": "Kaoru Maeda"
}, {
"id": "511347795659717",
"name": "Hirokazu Takahashi"
}, {
"id": "10201598897247208",
"name": "石山省吾"
}, {
"id": "10201646502916047",
"name": "Satoru Kanno"
}, {
"id": "449822611820106",
"name": "Yoichiro Iizuka"
}, {
"id": "10152167763779825",
"name": "Hayashi Tatsuya"
}, {
"id": "449004711910751",
"name": "Sachiko Notsu"
}, {
"id": "393385770799951",
"name": "Takumi Tanabe"
}, {
"id": "507142902719891",
"name": "古谷 ゆかり"
}, {
"id": "572058479576285",
"name": "Satoshi Yagi"
}, {
"id": "595179360590282",
"name": "ワタナベ モリヲ"
}, {
"id": "565784313542838",
"name": "Masahiko Taguchi"
}, {
"id": "677203379011818",
"name": "Obata Masa"
}, {
"id": "561310417321029",
"name": "Muneomi Sakuta"
}, {
"id": "654721794603615",
"name": "Yukinori Kuroda"
}, {
"id": "471770689635333",
"name": "田辺 めぐみ"
}, {
"id": "10201784235795126",
"name": "Asako Unno"
}, {
"id": "1592975120926614",
"name": "Tomio Fujii"
}, {
"id": "10202964334443172",
"name": "Nat Sakimura"
}, {
"id": "523078074465377",
"name": "Keisuke Kagawa"
}, {
"id": "325116630972406",
"name": "津田千穂"
}, {
"id": "4298847927599",
"name": "Sami Maekawa"
}, {
"id": "671955032839764",
"name": "Naohiro Fujie"
}, {
"id": "10152168475655765",
"name": "Takayuki Sadahiro"
}, {
"id": "552783474831745",
"name": "Satsuki Kawaji"
}],
"paging": {
"next": "https://graph.facebook.com/v2.0/10200841351194472/likes?pretty=1&limit=25&after=NTUyNzgzNDc0ODMxNzQ1",
"cursors": {
"before": "MTI0NjM2NDMzMA==",
"after": "NTUyNzgzNDc0ODMxNzQ1"
}
}
}
}],
"paging": {
"previous": "https://graph.facebook.com/v2.0/579612276/photos?type=tagged&limit=25&since=1395839118",
"next": "https://graph.facebook.com/v2.0/579612276/photos?type=tagged&limit=25&until=1344010662"
}
}