Pokaż zdjęcia z Instagram według Hashtagu

Taki temat mi się ostatnio nawinął: „Pokaż zdjęcia z Intagram’a, które mają odpowiedni hashtag”…

Szukałem kilka dni rozwiązań, ale poza zawiłymi skryptami, opartymi na Instagram API nie udało się nic znaleźć. Dopiero na Stack Overflow znalazłem dość proste rozwiązanie oparte na darmowym API, dostępnym bez logowania czy autoryzacji. Adres, który trzeba wywołać to:

https://www.instagram.com/explore/tags/twoj_tag/?__a=1

Zwracany jest kod JSON, który prezentuje pierwsze 16 wyników, a także informację czy istnieje kolejna strona z wynikami.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
    "tag":
    {
        "name": "twoj_tag",
        "content_advisory": null,
        "media":
        {
            "nodes": [],
            "count": 0,
            "page_info":
            {
                "has_next_page": false,
                "end_cursor": null
            }
        },
        "top_posts":
        {
            "nodes": []
        }
    }
}

Powyższy kod zwraca pusty wynik, ale łatwo zauważyć kilka cennych informacji. Wartość „media” zwraca dane zdjęć (nodes), łączną ilość, oraz informację czy istnieje następne strona i jakie jest jej id (end_cursor). Jeżeli następna strona istnieje, to należy ją wywołać adresem:

https://www.instagram.com/explore/tags/twoj_tag/?__a=1?max_id= >> end_cursor << (np.: https://www.instagram.com/explore/tags/wosp/?__a=1&max_id=J0HWajudwAAAF0HWaEprQAAAFiYA)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$baseUrl = 'https://www.instagram.com/explore/tags/wgdyni/?__a=1';
$url = $baseUrl;
$limit = 100;
$i = 1;
while(1)
{
    $json = json_decode(file_get_contents($url));
    $nodes = $json->tag->media->nodes;
    foreach ($nodes as $nID => $image)
    {
        echo('<p> ' . $i . ' <img src="' . $image->thumbnail_src . '"></p>');
        $i++;
        if ($i > $limit) exit;
    }
    if(!$json->tag->media->page_info->has_next_page) break;
    $url = $baseUrl.'&max_id='.$json->tag->media->page_info->end_cursor;
}

Prosty skrypt, którzy przedstawia maksymalnie 100 zdjęć na hashtag ‚wgdyni’. W pętli pobierane są dane z adresu $url. Za każdym razem adres jest modyfilkowany o parametr max_id=”. Jeżeli ‚has_next_page’ wynosi false, to pętla jest zatrzymywana. Ilość pobieranych zdjęć do pokazania ustalona jest w zmiennej $limit. Jeżeli indeks pętli $i jest większy od $limit, to następuje przerwanie ‚exit’.

Warto przejrzeć całe drzewo JSON z wynikiem. Można z niego odczytać m.in. takie informacje jak ilość komentarzy, lajków, opis zdjęcia czy jego rozmiar.

Zobacz przykład

Dodaj komentarz