Читайте JSON с php из Instagram __a = 1 - PullRequest
0 голосов
/ 03 мая 2020

оригинал

Сначала я хочу подчеркнуть, что это мой первый скрипт в PHP, поэтому многое можно улучшить, но сейчас мне просто нужно, чтобы он работал! Я создал этот скрипт в php, чтобы получить информацию о профиле publi c из файла publi c instagram json, расположенного по адресу https://www.instagram.com/ {{username}} /? __ a = 1, пробуя его локально все работает правильно, но размещение его на веб-сайте file_get_contents ($ url) не работает (строка 29), я пытался использовать CURL для чтения файла, но он все равно не работает, он не читает json файл правильно, пытаясь сделать эхо того, что он читает, Instagram появляется go на экране сайта. как я могу решить это?

обновление

Я только что заметил, что если я пытаюсь сделать file_get_contents () из ссылки любого профиля www.instagram.com/USERNAME, это дает мне точно такой же результат, может быть, что вы пытаетесь прочитать уведомление www.instagram.com/USERNAME/?__a= 1 instagram и перенаправить меня на страницу профиля?

Я пробовал htmlentities () для данных, которые я получаю через file_get_contents ... tatan .. фактически скрипт читает странную страницу html, которая НЕ найдена по адресу, который я ей дал!

<?php

$commentiPost;
$likePost;
$postData;
$image;
$urlprofilo;
$followers;
$username;
$follow;
$like;
$commenti;

function getMediaByUsername($count) {
global $image;
global $commentiPost;
global $likePost;
global $urlprofilo;
global $followers;
global $username;
global $follow;
global $postData;
global $like;
global $commenti;
$uname      = htmlspecialchars($_GET["name"]);
$username   = strtolower(str_replace(' ','_',$uname));
$url        = "https://www.instagram.com/".$username."/?__a=1";

$userinfo   = file_get_contents($url);
$userdata   = json_decode($userinfo,true);
$user       = $userdata['graphql']['user'];
$iteration_url = $url;



if(!empty($user)){

    $followers  = $user['edge_followed_by']['count'];
    $follow     = $user['edge_follow']['count'];
    $fullname   = $user['full_name'];
    $username   = $user['username'];
    $profilepic = $user['profile_pic_url'];
$profilepic = (explode("/",$profilepic));
$urlprofilo = "https://scontent-frt3-1.cdninstagram.com/v/t51.2885-19/s150x150/$profilepic[6]";


    $limit      = $count;
    $tryNext    = true;
    $found      = 0;


    while ($tryNext) {
        $tryNext = false;

        $remote = file_get_contents( $iteration_url );

        $response = $remote;

        if ($response === false) {
            return false;
        }
        $data = json_decode($response, true);

        if ( $data === null) {
            return false;
        }
        $media = $data['graphql']['user']['edge_owner_to_timeline_media'];

        foreach ( $media['edges'] as $index => $node ) {
            if ( $found + $index < $limit ) {
                if (isset($node['node']['is_video']) && $node['node']['is_video'] == true) {
                    $type = 'video';
                } else {
                    $type = 'image';
                }
                    $like = $like + $node['node']['edge_liked_by']['count'];
        $commenti = $commenti + $node['node']['edge_media_to_comment']['count'];
                    $image[] = array( "<a href=".$node['node']['display_url'].">
                                    <img src=".$node['node']['display_url']." alt="." />
                                    <h3>Like: </strong>".$node['node']['edge_liked_by']['count']."</strong>    Commenti: <strong>".$node['node']['edge_media_to_comment']['count']."</strong></h3>
                                </a>");
                    $postData[] = array(" '".gmdate("d-m-Y",$node['node']['taken_at_timestamp'])."',");
                  $likePost[] = array(" ".$node['node']['edge_liked_by']['count'].",");
                $commentiPost[] = array(" ".$node['node']['edge_media_to_comment']['count'].",");

            }
        }

        $found += count($media['edges']);


        if ( $media['page_info']['has_next_page'] && $found < $limit ) {
            $iteration_url = $url . '&max_id=' . $media['page_info']['end_cursor'];
            $tryNext = true;
        }
    }






} else{




}

}
getMediaByUsername( 12);

if(isset($image))
{
   $postTot = count($image);
}
else {
    $postTot = 0;
}
if($postTot > 0 and $followers > 0){
$ER = round(((($like + $commenti)/$postTot)/$followers)*100, 1);
}
else {
    $ER = 0;
}




?>

1 Ответ

0 голосов
/ 03 мая 2020

Я верю, что это проблема с сертификатом SSL. Когда вы измените свою функцию на:

function url_get_contents ( $url ) {
    if ( ! function_exists( 'curl_init' ) ){
        die( 'The cURL library is not installed.' );
    }

    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    // curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false);
    // curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false);
    $output = curl_exec( $ch );

    if(curl_errno( $ch )) {
        die ('Curl error: ' . curl_error($ch));
    }

    curl_close( $ch );
    return $output;
}

Вероятно, вы увидите в результате: Curl error: SSL certificate problem: unable to get local issuer certificate. Добавьте этот сертификат в вашу систему или раскомментируйте строки с параметрами: CURLOPT_SSL_VERIFYHOST и CURLOPT_SSL_VERIFYHOST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...