2015-10-26 2 views
0

После этого поста How to get a user's Instagram feed, я использую его для отображения последнего изображенияInstagram корма асинхронной



     function fetchData($url){ 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 20); 
     $result = curl_exec($ch); 
     curl_close($ch); 
     return $result; 
     } 

     $result = fetchData("https://api.instagram.com/v1/users/123456789/media/recent/?access_token=123456789.123asdsd.asdadasdas23423423&count=1"); 
     $result = json_decode($result); 
     foreach ($result->data as $post) { 
     if(empty($post->caption->text)) { 
     // Do Nothing 
     } 
     else { 
     // Display img 
     } 
     } 

Как может быть загружен асинхронно? Иногда для загрузки и задерживает всю отображаемую страницу занимает 2-3 секунды. Tks для вас время и помощь!

+1

загрузить выход через ajax. Кроме того, подумайте о кешировании результата за x минут – Steve

ответ

1

EDIT
ТКС в @steve, я решил ее запросов Instagram API один раз в час и сохранить ответ на instagram.json

получить-социально-media.php

function get_instagram($user_id=instagram_user_id,$count=1){ 

$instaurl = `https://api.instagram.com/v1/users/`.$user_id.`/media/recent/?access_token=instagram_access_token&count=`.$count; 

$instacache = `instagram.json`; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_URL,$instaurl); 
$instadata=curl_exec($ch); 
curl_close($ch); 

if(file_exists($instacache) && filemtime($instacache) > time() - 60*30){ 
    //echo "ok instagram"; 
} else { 
    $jsonInstaData = json_decode($instadata,true); 
    file_put_contents($instacache,json_encode($jsonInstaData)); 
} 
} 
echo get_instagram(); 


и Ajax для фронтэнда социальных медиа-block.phtml (Magento & самозагрузки)

jQuery(document).ready(function($) { 
$("#instagram-img").html(""); 
$.ajax({ 
    type: "GET", 
    async: true, 
    contentType: "application/json; charset=utf-8", 
    url:"resources/socialmedia-cache/instagram.json", 
    dataType: "json", 
    cache: true, 
    beforeSend: function() { 
     $("#loading").show(); 
    }, 
    success: function (data) { 
     console.log(data); 
     $("#loading").hide(); 
     if (data == "") { 
      $("#InstaContainer").hide(); 
     } else { 
      $("#InstaContainer").show(); 

      for (var i = 0; i < data["data"].length; i++) { 
       var dataForJson = JSON.stringify(data.data[i]); 
       var date = new Date(parseInt(data.data[i].caption.created_time) * 1000); 
       $("#instagram-img").append("<a target=`_blank` href=`" + data.data[i].link + "` title=`" + data.data[i].caption.text + "`><img src=`" + data.data[i].images.low_resolution.url + "` class=`img-responsive socialmedia-img`></img></a>"); 
       $("#instagram-img").append("<p align=`left`><script>" + "jQuery(document).ready(function() { jQuery(`a.timeago`).timeago();});" + "</" + "script><a class=`timeago` style=`color:#484848;` title=`" +(date.getMonth()+1)+"/"+date.getDate()+"/"+date.getFullYear()+", "+date.getHours()+":"+date.getMinutes()+ "`>" +(date.getMonth()+1)+"/"+date.getDate()+"/"+date.getFullYear()+", "+date.getHours()+":"+date.getMinutes()+ "</a></p>"); 
      } 
     } 
    } 
}); 
}); 

это также работает для facebook
для pinterest, я использую http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=1&q=https://www.pinterest.com/MyPinterest/feed.rss, быстрое решение для преобразования rss в json. так как мне нужны изображения размером более 236 пикселей, следующий разобранный 736px. Кроме того, IMG SRC должна быть извлечена из содержания

var string = data.responseData.feed.entries[i].content; 
var filtered = string.replace('/236x/', '/736x/'); 
var source = filtered.match(/src\s*=\s*"(.+?)"/); 

, вероятно, не лучший код, но, по крайней мере, это рабочий раствор.

+1

Я думал о кеше на стороне сервера в php, поэтому в вашем аякс-коде вместо прямого вызова instagram api вы вызываете ваш php-код. Ваш php-код использует curl/file_get_contents для вызова api, сохраняет json в файл и затем эхо-файл. В следующий раз, когда он вызывается, он проверяет, есть ли файл уже, и если да, то если он не старше xx минут, он просто открывает файл и выводит результат, вместо того, чтобы сделать http-запрос на api – Steve

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

  • Нет связанных вопросов^_^