2016-11-10 26 views
1

API网址: api.instagram.com/v1/users/self/media/recent/?access_token=kablenghe

我试图找出一种方式来为一个standard_resolution图像拍摄图像的URL,但Instagram继续提供裁剪后的图像。

裁切图片网址:

scontent.cdninstagram.com/t51.2885-15/s480x480/e35/c236.0.607.607/14474173_314142642294695_7071485231332589568_n.jpg?ig_cache_key=blah

非裁剪的图片网址:

scontent.cdninstagram.com/t51.2885-15/s480x480/e35/14474173_314142642294695_7071485231332589568_n.jpg?ig_cache_key=splerf

所以我需要移除的部分: “/c236.0.607.607”,这是Instagram用什么来定位n并调整图像裁剪的大小。有几个人在问这个问题,但我没有找到任何人发现这个令人烦恼的小的Instagram API问题的解决方案,包括裁剪图像和非方形媒体。

+0

['的preg_replace('〜/ C \ d {1,4}( ?:\。\ d {1,4}){3} /〜','/',$ url)'](https://regex101.com/r/ZT8vZo/3) –

+0

您能否提供一般模式为'c236.0.607.607'部分?它总是以'c'开始,哪些数字是反复出现的,哪些不是?如果你不知道,那么至少提供更多的例子。 –

+0

@Croutonix是的部分将始终以a/c开头,并且始终有4个以句点分隔的数字。我可能已经用下面的答案解决了这个问题,但是如果有改进它的话,我会喜欢你的输入! –

回答

1

好的,所以我想我可能已经明白了。下面是我有:

// The standard_resolution URL from Instagram API Response 
$full_res_cropped = $item['images']['standard_resolution']['url']; 

// Regex Pattern   
$pattern = '#\/c+(.\d[0-9]+\.\d.)+(\d)#'; 

// Replace with empty string 
$replacement = ''; 

// preg_replace 
$full_res = preg_replace($pattern, $replacement, $full_res_cropped); 

所以结果是:

// $full_res_cropped cropped image URL (original) 
scontent.cdninstagram.com/t51.2885-15/s480x480/e35/c236.0.607.607/14474173_314142642294695_7071485231332589568_n.jpg?ig_cache_key=flarg 

// $full_res resized, non-cropped URL (fixed) 
scontent.cdninstagram.com/t51.2885-15/s480x480/e35/14474173_314142642294695_7071485231332589568_n.jpg?ig_cache_key=flarg 

这将工作到Instagram的改变,他们裁剪和图像定位和改变URL结构的方式,但在那之前。很酷,我猜。

希望这可以帮助有类似问题的其他人!

+0

哦,另外,我发现使用http://www.regexpal.com/是非常有帮助的,但我的正则表达式可能可以改进。 –

0

您可以使用下面的正则表达式:

'~/c\d{1,4}(?:\.\d{1,4}){3}/~' 

regex demo

详细

  • / - 斜线
  • c - 字面c焦炭
  • \d{1,4} - 1到4位
  • (?:\.\d{1,4}){3} - 点
  • \d{1,4} - - 1到4位
  • / - 斜线如果删除它(的
    • \. 3序列从该模式中,正则表达式可能会匹配另一个URL子部分的一部分,但如果这样做,则需要替换为空字符串)

    PHP demo

    $re = '~/c\d{1,4}(?:\.\d{1,4}){3}/~'; 
    $str = 'scontent.cdninstagram.com/t51.2885-15/s480x480/e35/c236.0.607.607/14474173_314142642294695_7071485231332589568_n.jpg?ig_cache_key=blah'; 
    $result = preg_replace($re, '/', $str); 
    echo $result; 
    
  • 1

    你为什么不只是检查非方形介质盒子在客户端设置: enter image description here

    +0

    我做了第一件事,但它对JSON响应中的standard_resolution图像没有影响。 –

    +0

    许多其他人有同样的问题,但最终能够解决:http://stackoverflow.com/a/40347939/423089,我认为对于一些设置已被还原,因为有一些信息缺少详细信息选项卡中,确定,这是很好的 – krisrak