2016-11-11 217 views
6

這是我用來獲取沒有API的hashtag圖像的代碼。我不想使用任何憑據。無需添加client_id或訪問令牌。但我只能得到15張圖片。我如何獲得所有圖像?如何在沒有API的情況下在Instagram中獲取所有hashtag圖片?

<div> 

    <form action='#' method='post'> 
    <input type='input' name='txttag' /> 
    <input type='submit' value='Get Image' /> 
    </form> 

    </div> 


    <?php 
    function scrape_insta_hash($tag) { 
     $insta_source = file_get_contents('https://www.instagram.com/explore/tags/'.$tag.'/'); // instagrame tag url 
     $shards = explode('window._sharedData = ', $insta_source); 
     $insta_json = explode(';</script>', $shards[1]); 
     $insta_array = json_decode($insta_json[0], TRUE); 
     return $insta_array; // this return a lot things print it and see what else you need 
    } 

    if(isset($_POST['txttag'])) 
    { 
     $tag =$_POST['txttag']; // tag for which ou want images 
     $results_array = scrape_insta_hash($tag); 
     $limit = 15; // provide the limit thats important because one page only give some images then load more have to be clicked 
     $image_array= array(); // array to store images. 
      for ($i=0; $i < $limit; $i++) { 
       $latest_array = $results_array['entry_data']['TagPage'][0]['tag']['media']['nodes'][$i]; 
       $image_data = '<img src="'.$latest_array['thumbnail_src'].'">'; // thumbnail and same sizes 
       //$image_data = '<img src="'.$latest_array['display_src'].'">'; actual image and different sizes 
       array_push($image_array, $image_data); 
      } 
      foreach ($image_array as $image) { 
       echo $image;// this will echo the images wrap it in div or ul li what ever html structure 
      } 
      //https://www.instagram.com/explore/tags/your-tag-name/ 
    } 
    ?> 



    <style> 
    img { 
     height: 200px; 
     margin: 10px; 
    } 
    </style> 

回答

38

輕鬆的方法是用?__a=1https://www.instagram.com/explore/tags/girls/?__a=1請求並接收JSON沒有解析HTML和window._sharedData =

JSON中你可以看到page_info範圍與end_cursor

"page_info": { 
    "has_previous_page": false, 
    "start_cursor": "1381007800712523480", 
    "end_cursor": "J0HWCVx1AAAAF0HWCVxxQAAAFiYA", 
    "has_next_page": true 
}, 

使用end_cursor請求下一部分圖像:

https://www.instagram.com/explore/tags/girls/?__a=1&max_id=J0HWCVx1AAAAF0HWCVxxQAAAFiYA

UPD:

<?php 

$baseUrl = 'https://www.instagram.com/explore/tags/girls/?__a=1'; 
$url = $baseUrl; 

while(1) { 
    $json = json_decode(file_get_contents($url)); 
    print_r($json->tag->media->nodes); 
    if(!$json->tag->media->page_info->has_next_page) break; 
    $url = $baseUrl.'&max_id='.$json->tag->media->page_info->end_cursor; 
} 
+0

能否請你告訴我如何與你的代碼打印超過20張。 –

+0

@jigsparmar看到更新 – ilyapt

+1

非常感謝你.. –

相關問題