Вызов общедоступных данных JSON в Instagram с помощью PHP и присвоение их переменным - PullRequest
1 голос
/ 25 мая 2019

ЗАДАЧА:

Моя цель - получить общее количество лайков и комментариев за последние 3 сообщения в учетной записи Instagram и назначить их отдельным переменным.

ВОПРОС:

Я могу назвать только лайки и комментарии только к последнему сообщению, я не уверен, как получить информацию о других сообщениях. Я пытался часами.

ЛОГИЧЕСКОЕ ОБЪЯСНЕНИЕ ЦЕЛИ:

$post1_likes = number of likes from post;
$post1_comments = number of comments from post;

$post2_likes = number of likes from post;
$post2_comments = number of comments from post;

$post3_likes = number of likes from post;
$post3_comments = number of comments from post;

$combine_all = $post1_likes + $post1_comments + $post2_likes + $post2_comments $post3_likes + $post3_comments;

return combine_all;

ТЕКУЩИЙ КОД:

$raw = file_get_contents('https://www.instagram.com/instagram');

preg_match('/\"edge_media_preview_like\"\:\s?\{\"count\"\:\s?([0-9]+)/',$raw,$m1);

preg_match('/\"edge_media_to_comment\"\:\s?\{\"count\"\:\s?([0-9]+)/',$raw,$m2);

$combine_all = $m2[1] + $m1[1];

return $combine_all;

ССЫЛКА НА ДАННЫЕ:

ссылка на данные JSON

Я новичок в PHP и буду признателен за вашу помощь! Спасибо

Ответы [ 2 ]

1 голос
/ 25 мая 2019

ВТОРОЙ ОТВЕТ НА ОПТИМИЗАЦИЮ ВРЕМЕНИ С ИСПОЛЬЗОВАНИЕМ CURL, и это добавит только первые три значения

$website_url = 'https://www.instagram.com/instagram/?__a=1';
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_URL, $website_url);
curl_setopt($curl, CURLOPT_REFERER, $website_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0(Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/66.0');
$str = curl_exec($curl);
curl_close($curl);
$json = json_decode($str, true);

$combine_all=0; $loop = 0; 
foreach($json['graphql']['user']['edge_felix_video_timeline'] ['edges'] as $key=>$node){
        if(($node['node']['edge_media_to_comment']['count']>0 || $node['node']['edge_media_preview_like']['count']>0) && ($loop<4)){ // if you need add first only three then $loop<4
            $combine_all += $node['node']['edge_media_preview_like']['count'] + $node['node']['edge_media_to_comment']['count'];
            $loop++;
        }
}
echo "combine_all : ";
print_r($combine_all);

ВЫБОР ВЫБОРКА comb_all: 4415112

Просто декодируйте в массив, затемЗацикливание этого массива вы получите счетчик. ИСПЫТАНО, ЕГО РАБОТАЛО

$data = file_get_contents('https://www.instagram.com/instagram/?__a=1');
$data = json_decode($data,true);
echo'<PRE>';
$combine_all=0;
foreach($data['graphql']['user']['edge_felix_video_timeline'] ['edges'] as $key=>$node){
        if($node['node']['edge_media_to_comment']['count']>0 || $node['node']['edge_media_preview_like']['count']>0)
            $combine_all += $node['node']['edge_media_preview_like']['count'] + $node['node']['edge_media_to_comment']['count'];
}
echo "combine_all : ";
print_r($combine_all);

// Выход

combine_all : 12693471
1 голос
/ 25 мая 2019

JSON, который вы читаете, содержит несколько слоев данных, прежде чем вы получите информацию, которую хотите получить.Следующий код должен дать вам представление о том, что вам нужно сделать ...

// Decode the data to a nested associative array
$json = json_decode($raw, true);

// Loop through each of the edges
foreach ( $json['graphql']['user']['edge_felix_video_timeline']['edges'] as $edge ){
    echo $edge['node']['edge_media_to_comment']['count'].'/'
        .$edge['node']['edge_media_preview_like']['count'].PHP_EOL;
}
...