获取超过 25 个帖子时出现异常 restFb
Exception while fetching more than 25 posts restFb
我正在使用 restFb 版本 1.34.1,我想提取页面的所有帖子。
由于一次只能获得25个帖子,所以我使用
hasNext
和
getNextPageUrl
获取更多帖子的方法。这是我的代码片段。
Connection<Post> pageFeed = facebookClient.fetchConnection(page.getId() + "/feed", Post.class);
//pageFeed.hasNext()
List<Post> data = pageFeed.getData();
int count=0;
for (Post post : data) {
count++;
System.out.println("count------------------------>"+count);
System.out.println("story-->"+post.getStory());
System.out.println("message--->"+post.getMessage());
System.out.println("postid---------->"+post.getId());
}
while(pageFeed.hasNext())
{
System.out.println(pageFeed.getNextPageUrl());
pageFeed = facebookClient.fetchConnection(pageFeed.getNextPageUrl(),Post.class);
System.out.println(pageFeed);
data = pageFeed.getData();
for (Post post : data) {
count++;
System.out.println("count------------------------>"+count);
System.out.println("story-->"+post.getStory());
System.out.println("message--->"+post.getMessage());
System.out.println("postid---------->"+post.getId());
System.out.println("----------------------------");
}
}
我成功获得了前 25 个帖子,但是
行出现异常
pageFeed =
facebookClient.fetchConnection(pageFeed.getNextPageUrl(),Post.class);
以下是例外情况
Exception in thread "main" com.restfb.json.JsonException: JsonObject["data"] not found.
at com.restfb.json.JsonObject.get(JsonObject.java:482)
at com.restfb.json.JsonObject.getJsonArray(JsonObject.java:550)
at com.restfb.Connection.<init>(Connection.java:154)
at com.restfb.DefaultFacebookClient.fetchConnection(DefaultFacebookClient.java:363)
at com.orkash.restFb.PostExtractor.crawlPage(PostExtractor.java:76)
at com.orkash.restFb.PostExtractor.main(PostExtractor.java:30)
我确实检查了文档和其他堆栈线程,发现此方法仅适用于获取超过 25 个帖子。谁能指出这里的错误。
我也对通过浏览器获取的nextPageUrl进行了get请求,得到了json,里面有key"data"。
这是通过上述过程获得的样本 json :-
(完整的 json 很长所以我粘贴了其中的片段)
{
"data": [
{
"id": "177526890164_10158068948860165",
"from": {
"name": "Narendra Modi",
"category": "Politician",
"id": "177526890164"
},
"message": "Paid tributes to Shri Sunder Lal Patwa in Bhopal.",
"story": "Narendra Modi added 2 new photos.",
"story_tags": {
"0": [
{
"id": "177526890164",
"name": "Narendra Modi",
"type": "page",
"offset": 0,
"length": 13
}
]
},
"picture": "https://scontent.xx.fbcdn.net/v/t1.0-0/s130x130/15673047_10158068946670165_3063831989784759068_n.jpg?oh=248d746b114f486e12be04058dfd0791&oe=591975EE",
"link": "https://www.facebook.com/narendramodi/photos/a.10150164299700165.421791.177526890164/10158068946670165/?type=3",
"name": "Photos from Narendra Modi's post",
"icon": "https://www.facebook.com/images/icons/photo.gif",
"actions": [
{
"name": "Comment",
"link": "https://www.facebook.com/177526890164/posts/10158068948860165"
},
{
"name": "Like",
"link": "https://www.facebook.com/177526890164/posts/10158068948860165"
}
],
"privacy": {
"value": "",
"description": "",
"friends": "",
"allow": "",
"deny": ""
},
"type": "photo",
"status_type": "added_photos",
"object_id": "10158068946670165",
"created_time": "2016-12-28T11:59:25+0000",
"updated_time": "2017-01-04T15:59:35+0000",
"shares": {
"count": 2708
},
"is_hidden": false,
"is_expired": false,
"likes": {
"data": [
{
"id": "131388654027704",
"name": "Lovely Setia"
},
{
"id": "111162672721989",
"name": "Dilip Bhil"
},
{
"id": "1554142888157290",
"name": "Raees Khan Plastick"
},
{
"id": "105352369807500",
"name": "Dhawan Sharma"
},
{
"id": "205545709915488",
"name": "Kehraram Parajapti"
},
{
"id": "1815854775323914",
"name": "Àvàý Śhàŕmà"
},
{
"id": "1809366642682126",
"name": "Posanjit Chakraborty"
},
{
"id": "814626555322719",
"name": "Pappu Ray"
},
{
"id": "143505946020792",
"name": "Mand Jaz"
},
{
"id": "1671421303114441",
"name": "Pranab Jyoti Gogoi"
},
{
"id": "1705764099657485",
"name": "Riya Singh"
},
{
"id": "243742032692553",
"name": "Nevji Bhli"
},
{
"id": "716696131727496",
"name": "Purushotham Naidu"
},
{
"id": "193933561077517",
"name": "Durgesh Sahu Sahu"
},
{
"id": "231379427317074",
"name": "Pankaj Kumar"
},
{
"id": "132570197106057",
"name": "Srinivas Battar"
},
{
"id": "144547786036296",
"name": "Jgtpj Uday Prakash"
},
{
"id": "206532629811957",
"name": "Rajabhau Raut"
},
{
"id": "469875846448916",
"name": "Drkishor Sinha"
},
{
"id": "140811979746333",
"name": "Satyam Lodhi"
},
{
"id": "109671812871571",
"name": "Daleep Gour Daleep"
},
{
"id": "1577239832532749",
"name": "Tejas Nemanwar"
},
{
"id": "658207560971950",
"name": "Uttamsingh Rajpurohit"
},
{
"id": "147763812380490",
"name": "Lovelygiri Giri"
},
{
"id": "748935241836869",
"name": "Abhijeet Joshi"
}
],
你用错了Connection
。它应该是这样的:
int count=0;
Connection<Post> pageFeed = facebookClient.fetchConnection(page.getId() + "/feed", Post.class);
for (List<Post> pageFeedConnectionPage : pageFeed)
for (Post post : pageFeedConnectionPage) {
count++;
System.out.println("count------------------------>" + count);
System.out.println("story-->" + post.getStory());
System.out.println("message--->" + post.getMessage());
System.out.println("postid---------->" + post.getId());
System.out.println("----------------------------");
}
迭代连接 returns "pages" 并自动将下一个调用发送到图形 API。在每一页上,都有一个帖子列表,您也可以遍历此列表。
顺便说一句,文档中有一个示例,并且有几个集成测试显示了连接的使用方式。
我正在使用 restFb 版本 1.34.1,我想提取页面的所有帖子。 由于一次只能获得25个帖子,所以我使用
hasNext
和
getNextPageUrl
获取更多帖子的方法。这是我的代码片段。
Connection<Post> pageFeed = facebookClient.fetchConnection(page.getId() + "/feed", Post.class);
//pageFeed.hasNext()
List<Post> data = pageFeed.getData();
int count=0;
for (Post post : data) {
count++;
System.out.println("count------------------------>"+count);
System.out.println("story-->"+post.getStory());
System.out.println("message--->"+post.getMessage());
System.out.println("postid---------->"+post.getId());
}
while(pageFeed.hasNext())
{
System.out.println(pageFeed.getNextPageUrl());
pageFeed = facebookClient.fetchConnection(pageFeed.getNextPageUrl(),Post.class);
System.out.println(pageFeed);
data = pageFeed.getData();
for (Post post : data) {
count++;
System.out.println("count------------------------>"+count);
System.out.println("story-->"+post.getStory());
System.out.println("message--->"+post.getMessage());
System.out.println("postid---------->"+post.getId());
System.out.println("----------------------------");
}
}
我成功获得了前 25 个帖子,但是
行出现异常pageFeed = facebookClient.fetchConnection(pageFeed.getNextPageUrl(),Post.class);
以下是例外情况
Exception in thread "main" com.restfb.json.JsonException: JsonObject["data"] not found.
at com.restfb.json.JsonObject.get(JsonObject.java:482)
at com.restfb.json.JsonObject.getJsonArray(JsonObject.java:550)
at com.restfb.Connection.<init>(Connection.java:154)
at com.restfb.DefaultFacebookClient.fetchConnection(DefaultFacebookClient.java:363)
at com.orkash.restFb.PostExtractor.crawlPage(PostExtractor.java:76)
at com.orkash.restFb.PostExtractor.main(PostExtractor.java:30)
我确实检查了文档和其他堆栈线程,发现此方法仅适用于获取超过 25 个帖子。谁能指出这里的错误。
我也对通过浏览器获取的nextPageUrl进行了get请求,得到了json,里面有key"data"。 这是通过上述过程获得的样本 json :- (完整的 json 很长所以我粘贴了其中的片段)
{
"data": [
{
"id": "177526890164_10158068948860165",
"from": {
"name": "Narendra Modi",
"category": "Politician",
"id": "177526890164"
},
"message": "Paid tributes to Shri Sunder Lal Patwa in Bhopal.",
"story": "Narendra Modi added 2 new photos.",
"story_tags": {
"0": [
{
"id": "177526890164",
"name": "Narendra Modi",
"type": "page",
"offset": 0,
"length": 13
}
]
},
"picture": "https://scontent.xx.fbcdn.net/v/t1.0-0/s130x130/15673047_10158068946670165_3063831989784759068_n.jpg?oh=248d746b114f486e12be04058dfd0791&oe=591975EE",
"link": "https://www.facebook.com/narendramodi/photos/a.10150164299700165.421791.177526890164/10158068946670165/?type=3",
"name": "Photos from Narendra Modi's post",
"icon": "https://www.facebook.com/images/icons/photo.gif",
"actions": [
{
"name": "Comment",
"link": "https://www.facebook.com/177526890164/posts/10158068948860165"
},
{
"name": "Like",
"link": "https://www.facebook.com/177526890164/posts/10158068948860165"
}
],
"privacy": {
"value": "",
"description": "",
"friends": "",
"allow": "",
"deny": ""
},
"type": "photo",
"status_type": "added_photos",
"object_id": "10158068946670165",
"created_time": "2016-12-28T11:59:25+0000",
"updated_time": "2017-01-04T15:59:35+0000",
"shares": {
"count": 2708
},
"is_hidden": false,
"is_expired": false,
"likes": {
"data": [
{
"id": "131388654027704",
"name": "Lovely Setia"
},
{
"id": "111162672721989",
"name": "Dilip Bhil"
},
{
"id": "1554142888157290",
"name": "Raees Khan Plastick"
},
{
"id": "105352369807500",
"name": "Dhawan Sharma"
},
{
"id": "205545709915488",
"name": "Kehraram Parajapti"
},
{
"id": "1815854775323914",
"name": "Àvàý Śhàŕmà"
},
{
"id": "1809366642682126",
"name": "Posanjit Chakraborty"
},
{
"id": "814626555322719",
"name": "Pappu Ray"
},
{
"id": "143505946020792",
"name": "Mand Jaz"
},
{
"id": "1671421303114441",
"name": "Pranab Jyoti Gogoi"
},
{
"id": "1705764099657485",
"name": "Riya Singh"
},
{
"id": "243742032692553",
"name": "Nevji Bhli"
},
{
"id": "716696131727496",
"name": "Purushotham Naidu"
},
{
"id": "193933561077517",
"name": "Durgesh Sahu Sahu"
},
{
"id": "231379427317074",
"name": "Pankaj Kumar"
},
{
"id": "132570197106057",
"name": "Srinivas Battar"
},
{
"id": "144547786036296",
"name": "Jgtpj Uday Prakash"
},
{
"id": "206532629811957",
"name": "Rajabhau Raut"
},
{
"id": "469875846448916",
"name": "Drkishor Sinha"
},
{
"id": "140811979746333",
"name": "Satyam Lodhi"
},
{
"id": "109671812871571",
"name": "Daleep Gour Daleep"
},
{
"id": "1577239832532749",
"name": "Tejas Nemanwar"
},
{
"id": "658207560971950",
"name": "Uttamsingh Rajpurohit"
},
{
"id": "147763812380490",
"name": "Lovelygiri Giri"
},
{
"id": "748935241836869",
"name": "Abhijeet Joshi"
}
],
你用错了Connection
。它应该是这样的:
int count=0;
Connection<Post> pageFeed = facebookClient.fetchConnection(page.getId() + "/feed", Post.class);
for (List<Post> pageFeedConnectionPage : pageFeed)
for (Post post : pageFeedConnectionPage) {
count++;
System.out.println("count------------------------>" + count);
System.out.println("story-->" + post.getStory());
System.out.println("message--->" + post.getMessage());
System.out.println("postid---------->" + post.getId());
System.out.println("----------------------------");
}
迭代连接 returns "pages" 并自动将下一个调用发送到图形 API。在每一页上,都有一个帖子列表,您也可以遍历此列表。
顺便说一句,文档中有一个示例,并且有几个集成测试显示了连接的使用方式。