回答
这是一个新的方法来获得一个大的图像。它诞生的预览方法不适用
/**
* return a big url of facebook
* works onky for type PHOTO
* @param picture
* @param is a post type link
* @return url of image
*/
@Transactional
public String getBigImageByFacebookPicture(String pictrue,Boolean link){
if(link && pictrue.contains("url=http")){
String url = pictrue.substring(pictrue.indexOf("url=") + 4);
try {
url = java.net.URLDecoder.decode(url, "UTF-8");
} catch (UnsupportedEncodingException e) {
StringBuffer sb = new StringBuffer("Big image for Facebook link not found: ");
sb.append(link);
loggerTakePost.error(sb.toString());
return null;
}
return url;
}else{
try {
Document doc = Jsoup.connect(pictrue).get();
return doc.select("#fbPhotoImage").get(0).attr("src");
} catch (Exception e) {
StringBuffer sb = new StringBuffer("Big image for Facebook link not found: ");
sb.append(link);
loggerTakePost.error(sb.toString());
return null;
}
}
}
后享受您的大图像:)
你的答案为我解决了这个问题,我推荐给大家 – TooCooL 2014-09-23 23:01:36
我问了这个问题,现在看来,你的答案似乎是最好的解决方案。做得好。 – user1105951 2014-10-11 10:00:05
所有使用此答案,并希望删除130x130无论它是130x130或s433x23或p43x43 检查此: http://stackoverflow.com/questions/26313382/remove-dynamic-substring-from-string/26313575 #26313575 – user1105951 2014-10-11 10:47:14
什么工作对我来说: 充分利用饲料中的图片链接,并以“_n.jpg
”
我不得不诉诸于此,但它感觉真的很脏并且很脆弱。仍在寻找更好的方法。 – 2012-08-23 09:44:47
不错,它的工作。我觉得n代表正常,而我把b我得到了更大的一个。 – 2013-08-10 09:49:27
我不得不诉诸于此。 Facebook并没有在它的API中提供这种明显必要的功能,这真是令人遗憾。 – jokeefe 2013-12-06 03:18:51
OK取代“_s.jpg
”,我发现了一个更好的办法。当您使用图API检索供稿时,任何类型为photo
的供稿项目都将有一个名为object_id
的字段,该字段不是纯粹的status
类型项目。用该ID查询Graph API,例如https://graph.facebook.com/1234567890
。请注意,对象ID不是下划线分隔的值,例如该Feed项目的主ID。
object_id
查询的结果将是一个新的JSON字典,其中包含一个source
属性,该属性包含的图像的URL至今足以满足我的需求。
另外还有一个images
数组,其中包含更多用于图像大小不同的图像URL,但其中的大小看起来并不可预测,并且实际上并不都与图像后面的物理尺寸相对应URL。
我仍然希望有一种方法可以通过一个Graph API调用来实现,但看起来并不存在。
的Graph API photo object具有picture
连接(类似于用户对象具有):
“照片的专辑尺寸图。 [...]返回:HTTP 302重定向到图片的URL“
所以请求https://graph.facebook.com/{object-id-from-feed}/picture
将立即重定向到照片的相册大小的版本。 (有用的不仅是在浏览器中显示出来,而且如果FE要图像下载到您的服务器,使用cURL与follow_redirect选项集。)
编辑:
与开始API v2.3,供稿帖子的/picture
边缘已被弃用。
但是,作为字段仍然可以请求图片 - 但它会是一个小图片。
但是full_picture
也可以使用。
所以/{object-id-from-feed}?fields=picture,full_picture
可以用来请求那些,或者他们可以直接请求与其他的feed数据,就像这样/page-id/feed?fields=picture,full_picture,…
(附加字段,如消息等,必须用相同的方式指定。)
工作形式我。不需要每个帖子的api facebook :) – Marcelo 2013-07-31 21:00:41
这是真正的交易。不要乱用绝对文件url的 – user1576978 2014-12-10 18:48:03
这很奇妙 – 2015-01-20 17:38:47
对于来自高分辨率图像链接:
- 链接的帖子
- 视频帖子
- 照片的帖子
我使用以下命令:
注:的我给了_s -> _o
hack precedenc e通过object_id/picture
方法是因为object_id方法没有返回所有图像的结果。
var picture = result.picture;
if (picture) {
if (result.type === 'photo') {
if (picture.indexOf('_s') !== -1) {
console.log('CONVERTING');
picture = picture.replace(/_s/, '_o');
} else if (result.object_id) {
picture = 'https://graph.facebook.com/' + result.object_id + '/picture?width=9999&height=9999';
}
} else {
var qps = result.picture.split('&');
for (var i = 0; i < qps.length; i++) {
var qp = qps[i];
var matches = qp.match(/(url=|src=)/gi);
if (matches && matches.length > 0) picture = decodeURIComponent(qp.split(matches[0])[1]);
}
}
}
这非常有效。你可以建立一个检查,如果图片无法从_s更改为_o或_n(容易使用Picasso)加载,只需获取对象ID并通过另一个API调用从那里获取源代码。 – Wenger 2014-05-01 13:31:38
好的建议!我并不真的需要这种功能,但对于真正需要最大图像的人来说,这是一个好主意。 – mattdlockyer 2014-05-01 23:40:30
这很棒!非常感谢! – jokeefe 2014-06-04 20:55:38
感谢@mattdlockyer的JS解决方案。这里是一个类似的东西在PHP:
$posts = $facebook->api('/[page]/posts/', 'get');
foreach($posts['data'] as $post)
{
if(stristr(@$post['picture'], '_s.'))
{
$post['picture'] = str_replace('_s.', '_n.', @$post['picture']);
}
if(stristr(@$post['picture'], 'url='))
{
parse_str($post['picture'], $picturearr);
if($picturearr['url'])
$post['picture'] = $picturearr['url'];
}
//do more stuff with $post and $post['picture'] ...
}
其实,你需要两个不同的解决方案,以充分解决这个问题。
1] https://graph.facebook.com/ {OBJECT_ID} /图片
这个解决方案工作正常发布至Facebook的图片和视频,但遗憾的是,它的情况下,原始图像文件并没有直接上传至Facebook返回小图片。 (例如,在您的页面上发布指向其他网站的链接时)。
2] Facebook Graph API提供了一种获取Feed中的完整图像的方法,用于这些外部链接。如果您在调用API时将'full_picture'添加到以下示例中的字段中,则会提供指向更高分辨率版本的链接。
结合这两个解决方案,我结束了在过滤PHP中输入如下:
if (isset($post['object_id'])){
$image_url = 'https://graph.facebook.com/'.$post['object_id'].'/picture';
}else if (isset($post['full_picture'])) {
$image_url = $post['full_picture'];
}else{
$image_url = '';
}
试过这个,但是...不幸的是full_picture链接指向一个相当小的图像:( – 2015-02-03 20:51:24
您的权利@YoupTube经过一些更多的实验后,我需要更新我的答案... – 2015-02-04 10:39:11
从另一篇文章中我学会了使用“附件”。那个人正在为我工作。它包含一个带有图像和来源的媒体节点。自己试试! – 2015-02-04 10:40:29
从@Lachezar托多罗夫我决定后我目前的做法正面评论后(包括寻呼并使用Json.NET;):
try
{
FacebookClient fbClient = new FacebookClient(HttpContext.Current.Session[SessionFacebookAccessToken].ToString());
JObject posts = JObject.Parse(fbClient.Get(String.Format("/{0}/posts?fields=message,picture,link,attachments", FacebookPageId)).ToString());
JArray newsItems = (JArray)posts["data"];
List<NewsItem> result = new List<NewsItem>();
while (newsItems.Count > 0)
{
result.AddRange(GetItemsFromJsonData(newsItems));
if (result.Count > MaxNewsItems)
{
result.RemoveRange(MaxNewsItems, result.Count - MaxNewsItems);
break;
}
JToken paging = posts["paging"];
if (paging != null)
{
if (paging["next"] != null)
{
posts = JObject.Parse(fbClient.Get(paging.Value<String>("next")).ToString());
newsItems = (JArray)posts["data"];
}
}
}
return result;
}
和辅助方法retieve个别项目:
private static IEnumerable<NewsItem> GetItemsFromJsonData(IEnumerable<JToken> items)
{
List<NewsItem> newsItems = new List<NewsItem>();
foreach (JToken item in items.Where(item => item["message"] != null))
{
NewsItem ni = new NewsItem
{
Message = item.Value<String>("message"),
DateTimeCreation = item.Value<DateTime?>("created_time"),
Link = item.Value<String>("link"),
Thumbnail = item.Value<String>("picture"),
// http://stackoverflow.com/questions/28319242/simplify-looking-up-nested-json-values-with-json-net/28359155#28359155
Image = (String)item.SelectToken("attachments.data[0].media.image.src") ?? (String)item.SelectToken("attachments.data[0].subattachments.data[0].media.image.src")
};
newsItems.Add(ni);
}
return newsItems;
}
NewsItem类使用:
public class NewsItem
{
public String Message { get; set; }
public DateTime? DateTimeCreation { get; set; }
public String Link { get; set; }
public String Thumbnail { get; set; }
public String Image { get; set; }
}
参见: “类型=大” http://api-portal.anypoint.mulesoft.com/facebook/api/facebook-graph-api/docs/reference/pictures
只要把URL后获得大的图片。
我觉得这可能是这里最可行的解决方案。值得注意的是/ me/picture?type = large会将302重定向到图像本身。如果你想要实际的数据,包括图像的URL,那么你将需要传递?redirect = false参数。 – SpongeBobPHPPants 2015-09-17 15:31:09
- 1. 如何从Facebook中获取大尺寸图片图形api
- 2. 使用Google Feed API获取图片
- 3. 如何使用Facebook图形API获取新闻Feed?
- 4. 使用图形API获取Facebook的图片 - 比picture.type(大)
- 5. 如何使用Facebook PHP图形API获取用户图片?
- 6. Facebooker和图形API,获取新闻Feed
- 7. Zend_Feed:从Feed中获取图片URL
- 8. Facebook图形API iOS:如何获取Feed图片的宽度和高度?
- 9. 从facebook图形获取完整大小的图片API
- 10. eBay API - 如何获取大型图片?
- 11. Facebook图形API获取原始图片大小不起作用
- 12. 从rss feed获取图片网址?
- 13. 如何获取/使用图形API
- 14. 通过图形API发布到FB feed时应使用什么图片大小?
- 15. 从rss feed提取图片
- 16. 如何从facebook图形API获得100x100方形图片?
- 17. 如何仅使用图形API从用户的Facebook新闻中获取照片?
- 18. 如何从wordpress中的RSS feed获取图片?
- 19. 如何使用Facebook图形API获取专辑照片?
- 20. 如何从web api url获取图片?
- 21. 如何从wikipedia API获取图片?
- 22. 如何从flickr获取图片API
- 23. 如何从Zabbix获取图形值API
- 24. Facebook的图形API - 批量获取大型图片
- 25. 从foursquare获取图片API
- 26. 如何使用jQuery从文件中获取图片大小?
- 27. 如何从discogs api获取大图像?
- 28. 使用图形API获取Facebook页面图片流
- 29. 用于沙盒模式下的Feed图形API图片
- 30. 图形API:检索页面Feed中的图片尺寸
当前的答案无效。请更新您选择的答案。 @Benjamin Kuijten现在有正确的答案。 – 2015-02-18 08:55:48