1

私はPHPが初めてで、(たとえば)user_id 3によって公開された最近の3つのアイテムから標準解像度の画像へのリンクのリストを抽出するためにInstagram APIを処理する方法がわかりません.

これまでに作成したものは次のとおりです。

<?php
function get_instagram($user_id,$count)
{
    $user_id = '3';
    $count = '3';
    $url = 'https://api.instagram.com/v1/users/'.$user_id.'/media/recent/?access_token=13137.f59def8.1a759775695548999504c219ce7b2ecf&count='.$count;
    $jsonData = $json_decode((file_get_contents($url)));
    $data = $jsonData->data;
    $result = '<ul>';
    foreach ($data as $key => $value) {
        $result .= '<li><a href='.$value->link.' ><img src="'.$value->images->standard_resolution->url.'" width="70" height="70" /></a></li> ';
    }
    $result .= '</ul>';
    return $result;
}

結果は空白のページですが..助けてもらえますか?

4

3 に答える 3

6

返されたデータをエコーするか、何かをする必要があります(また$、json_decode関数の前にルージュがあります)

これを試して:

<?php
function get_instagram($user_id=15203338,$count=6,$width=190,$height=190){

    $url = 'https://api.instagram.com/v1/users/'.$user_id.'/media/recent/?access_token=13137.f59def8.1a759775695548999504c219ce7b2ecf&count='.$count;

    // Also Perhaps you should cache the results as the instagram API is slow
    $cache = './'.sha1($url).'.json';
    if(file_exists($cache) && filemtime($cache) > time() - 60*60){
        // If a cache file exists, and it is newer than 1 hour, use it
        $jsonData = json_decode(file_get_contents($cache));
    } else {
        $jsonData = json_decode((file_get_contents($url)));
        file_put_contents($cache,json_encode($jsonData));
    }

    $result = '<div id="instagram">'.PHP_EOL;
    foreach ($jsonData->data as $key=>$value) {
        $result .= "\t".'<a class="fancybox" data-fancybox-group="gallery" 
                            title="'.htmlentities($value->caption->text).' '.htmlentities(date("F j, Y, g:i a", $value->caption->created_time)).'"
                            style="padding:3px" href="'.$value->images->standard_resolution->url.'">
                          <img src="'.$value->images->low_resolution->url.'" alt="'.$value->caption->text.'" width="'.$width.'" height="'.$height.'" />
                          </a>'.PHP_EOL;
    }
    $result .= '</div>'.PHP_EOL;
    return $result;
}

echo get_instagram();
?>


$value->location->name

空であることを確認したい場合は表示せず、設定されている場合は文字列を追加したい場合は、次のようにします。

$location = (!empty($value->location->name))?'@'.$value->location->name:null;

次に$location、必要な場所にエコーするために使用します。

于 2012-04-19T15:49:38.297 に答える
2

これを試す人のためにボイラープレートを使用できる小さなスクリプトを作成することで、選択した回答を拡張しました。

すべての変数でセットアップされ、基本的なマークアップから始まります。Instagrams API ドキュメントのセレクターを使用して、必要に応じてその出力を構築できます。

これは、特に WordPress で使用するように構築されており、任意の PHP アプリケーションで使用できることを条件として、画像サイズをわずかに調整します。

<?php
function instagram($count = 10, $width = 640, $height = 640) {

    $user_id = 123456789;
    $access_token = '123456789';
    $size = wp_is_mobile() ? 'low_resolution' : 'standard_resolution';
    $url = 'https://api.instagram.com/v1/users/'.$user_id.'/media/recent/?access_token='.$access_token.'&count='.$count;
    $cache_location = './'.sha1($url).'.json';
    $cache_time = '-1 hour';

    if (file_exists($cache_location) && filemtime($cache_location) > strtotime($cache_time)) {
        // If a cache file exists, and it is newer than 1 hour, use it
        $jsonData = json_decode(file_get_contents($cache_location));
    } else {
        $jsonData = json_decode((file_get_contents($url)));
        file_put_contents($cache_location,json_encode($jsonData));
    }

    foreach ($jsonData->data as $key=>$value) {
        echo '<div>';
        echo '<img src="'.$value->images->$size->url.'"/>';
        echo '</div>';
    }
}

基本的な使い方

<?php echo instagram(); ?>

高度な使い方

<?php echo instagram($count = 1, $width = 100, $height = 100); ?>

Github リポジトリ

于 2015-02-13T18:21:24.907 に答える
0

ウェルプ、これは 1 週間前には機能していましたが、現在は PHP エラーが発生します。

「メッセージ: 非オブジェクトのプロパティを取得しようとしています」

foreach ステートメントのある行:foreach ($jsonData->data as $key=>$value)

JSON フィードが実際に破損していたことが判明しました。一部のインスタグラムのキャプションが欠落していたため、if empty ステートメントを追加する必要がありました。私も今別の方法を使用しています。あなたの考えに興味がありますが、うまくいきます!

<?php

  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/USER ID HERE/media/recent/?access_token=ACCES TOKEN HERE&count=14");

  $cache = './instagram.json';
  if(file_exists($cache) && filemtime($cache) > time() - 60*60){
  // If a cache file exists, and it is newer than 1 hour, use it
  $instaData = json_decode(file_get_contents($cache));
    } else {
  $instaData = json_decode((file_get_contents($result)));
    file_put_contents($cache,json_encode($instaData));
  }

  foreach ($instaData->data as $post) {
     if(empty($post->caption->text)) {
       // Do Nothing
     }
     else {
        echo '<a class="instagram-unit" target="blank" href="'.$post->link.'">
        <img src="'.$post->images->low_resolution->url.'" alt="'.$post->caption->text.'" width="100%" height="auto" />
        <div class="instagram-desc">'.htmlentities($post->caption->text).' | '.htmlentities(date("F j, Y, g:i a", $post->caption->created_time)).'</div></a>';
     }

  }
?>
于 2013-08-22T22:30:16.037 に答える