Как получить содержимое из моего профиля в Instagram? - PullRequest
0 голосов
/ 25 апреля 2019

Я создал скрипт, который считывает информацию из моего профиля в Instagram, загружая содержимое страницы и затем ища в ней строки. Это сработало очень хорошо, но через несколько месяцев сценарий ооочень медленный и выдает белый экран. Как видите, я пытаюсь отобразить 8 значений из своего профиля в Instagram. Но только если я отображаю только 2 значения одновременно, моя страница загружается (но медленно) и не заканчивается белым экраном смерти.

Я уже пытался отобразить все ошибки PHP, но ничего. Все значения верны, если я отображаю только одно значение.

preg_match слишком медленно для 8 значений? Есть ли более быстрые альтернативы для этого?

error_reporting(E_ALL);
ini_set('display_errors', 1);

function GetIGInformation($type)
{

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

    if ($type == "1") {
        if (preg_match('/"profile_pic_url_hd":"(.*?)","requested_by_viewer":/', $raw, $ProfilePic2)) {
            return $ProfilePic2[1];
        } else {
            return "https://instagram.fyyz1-1.fna.fbcdn.net/vp/6a15ea059743aabab5376f3d6377a51a/5D5480F1/t51.2885-19/44884218_345707102882519_2446069589734326272_n.jpg?_nc_ht=instagram.fyyz1-1.fna.fbcdn.net";
        }

    }

    if ($type == "2") {
        if (preg_match('/"edge_followed_by":{"count":(.*?)},"followed_by_viewer":/', $raw, $Follower2)) {
            return $Follower2[1];
        } else {
            return "0";
        }
    }

    if ($type == "3") {
        if (preg_match('/"edge_owner_to_timeline_media":{"count":(.*?),"page_info":/', $raw, $Posts2)) {
            return $Posts2[1];
        } else {
            return "No posts";
        }
    }

    if ($type == "4") {
        if (preg_match('/"edge_follow":{"count":(.*?)},"follows_viewer"/', $raw, $Followed2)) {
            return $Followed2[1];
        } else {
            return "Nobody";
        }
    }

    if ($type == "5") {
        if (preg_match('/"external_url":"(.*?)","external_url_linkshimmed":/', $raw, $Website2)) {
            return $Website2[1];
        } else {
            return "No website";
        }
    }

    if ($type == "6") {
        if (preg_match('/"username":"(.*?)","connected_fb_page":/', $raw, $Username2)) {
            return $Username2[1];
        } else {
            return "No username";
        }
    }

    if ($type == "7") {
        if (preg_match('/"display_url":"(.*?)","edge_liked_by":/', $raw, $BilderVorhanden2)) {
            return "Yes";
        } else {
            return "No";
        }
    }

    if ($type == "8") {

        if (preg_match('/"biography":"(.*?)","blocked_by_viewer":/', $raw, $Biographie2)) {
            return $Biographie2[1];
        } else {
            return "No biography";
        }
    }

}

echo GetIGInformation(1);
echo "\n";
echo GetIGInformation(2);
echo "\n";
echo GetIGInformation(3);
echo "\n";
echo GetIGInformation(4);
echo "\n";
echo GetIGInformation(5);
echo "\n";
echo GetIGInformation(6);
echo "\n";
echo GetIGInformation(7);
echo "\n";
echo GetIGInformation(8);
echo "\n";

Ответы [ 2 ]

2 голосов
/ 26 апреля 2019

Я нашел решение, используя методы curl:

function curlGetContents($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
    $html = curl_exec($ch);
    $data = curl_exec($ch);
    curl_close($ch);
    return htmlspecialchars($data);
}

$raw = curlGetContents("https://www.instagram.com/MyUserName/");
0 голосов
/ 25 апреля 2019

Нет, preg_match не медленная функция.

Должны быть и другие проблемы. Я не совсем уверен, если это может решить вашу проблему, возможно, добавьте memory_limit к -1, например:

// error_reporting(E_ALL);
error_reporting(0);
ini_set('max_execution_time', 0);
ini_set('memory_limit', '-1');
set_time_limit(0);

function GetIGInformation($type)
{

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

    if ($type == "1") {
        if (preg_match('/"profile_pic_url_hd":"(.*?)","requested_by_viewer":/', $raw, $ProfilePic2)) {
            return $ProfilePic2[1];
        } else {
            return "https://instagram.fyyz1-1.fna.fbcdn.net/vp/6a15ea059743aabab5376f3d6377a51a/5D5480F1/t51.2885-19/44884218_345707102882519_2446069589734326272_n.jpg?_nc_ht=instagram.fyyz1-1.fna.fbcdn.net";
        }

    }

    if ($type == "2") {
        if (preg_match('/"edge_followed_by":{"count":(.*?)},"followed_by_viewer":/', $raw, $Follower2)) {
            return $Follower2[1];
        } else {
            return "0";
        }
    }

    if ($type == "3") {
        if (preg_match('/"edge_owner_to_timeline_media":{"count":(.*?),"page_info":/', $raw, $Posts2)) {
            return $Posts2[1];
        } else {
            return "No posts";
        }
    }

    if ($type == "4") {
        if (preg_match('/"edge_follow":{"count":(.*?)},"follows_viewer"/', $raw, $Followed2)) {
            return $Followed2[1];
        } else {
            return "Nobody";
        }
    }

    if ($type == "5") {
        if (preg_match('/"external_url":"(.*?)","external_url_linkshimmed":/', $raw, $Website2)) {
            return $Website2[1];
        } else {
            return "No website";
        }
    }

    if ($type == "6") {
        if (preg_match('/"username":"(.*?)","connected_fb_page":/', $raw, $Username2)) {
            return $Username2[1];
        } else {
            return "No username";
        }
    }

    if ($type == "7") {
        if (preg_match('/"display_url":"(.*?)","edge_liked_by":/', $raw, $BilderVorhanden2)) {
            return "Yes";
        } else {
            return "No";
        }
    }

    if ($type == "8") {

        if (preg_match('/"biography":"(.*?)","blocked_by_viewer":/', $raw, $Biographie2)) {
            return $Biographie2[1];
        } else {
            return "No biography";
        }
    }

}

echo GetIGInformation(1);
echo "\n";
echo GetIGInformation(2);
echo "\n";
echo GetIGInformation(3);
echo "\n";
echo GetIGInformation(4);
echo "\n";
echo GetIGInformation(5);
echo "\n";
echo GetIGInformation(6);
echo "\n";
echo GetIGInformation(7);
echo "\n";
echo GetIGInformation(8);
echo "\n";

и посмотри, что получится.

  • Возможно, некоторые переменные / политики могли быть изменены. Вы можете var_dump(); ваши переменные шаг за шагом, чтобы проверить, где проблема может быть.
  • Вы также можете установить error_reporting(E_ALL);, чтобы увидеть, могут ли какие-либо предупреждения / ошибки возвращаться.

Возможно, запустите эту команду в своем терминале, если используете macOS, или найдите эквивалент команды для других Linux / Windows:

 php -f /path/to/your/php/file.php 

и посмотрим, что может вернуться.

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