2016-11-10 1 views
1

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

I Я пытаюсь найти способ получить URL-адрес изображения для изображения стандартной_революции, но Instagram продолжает обслуживать обрезанные изображения.

обрезается URL изображения:

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

Non-обрезается URL изображения :

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

Поэтому мне нужно удалили часть: "/c236.0.607.607", который что использует Instagram для positio n и размер изображения. Несколько человек задают этот вопрос, но я не нахожу тех, кто нашел ответ на эту раздражающую небольшую проблему API-интерфейса Instagram с обрезанными изображениями и неквадратичными средами.

+0

[ 'preg_replace ('~/с \ D {1,4} (?: \. \ d {1,4}) {3}/~ ','/', $ url) '] (https://regex101.com/r/ZT8vZo/3) –

+0

Можете ли вы предоставить общий шаблон для 'c236.0.607.607' части? Всегда ли это начинается с 'c', какие числа повторяются, а какие нет? Если вы не знаете, то, по крайней мере, представите больше примеров. –

+0

@Croutonix yes раздел всегда будет начинаться с символа/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} - 3 последовательности
    • \. - точка
    • \d{1,4} - от 1 до 4 цифр
  • / - косой черты (если убрать его из шаблона регулярное выражение может совпадать с частью другого 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. –

+0

У многих других людей была такая же проблема, но они были в состоянии разрешить в конце: http://stackoverflow.com/a/40347939/423089, я думаю, что для некоторых настроек было отменено, потому что на вкладке сведений была некоторая информация, и после что это было хорошо – krisrak

Смежные вопросы