Частный Instagram InstagramAPI \ Instagram :: _ setUser () ошибка - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь реализовать https://github.com/mgp25/Instagram-API на laravel, и после успешного входа в Instagram я должен использовать _setUser, чтобы использовать выходные данные после входа в систему, например:

public function check()
{
    $username = 'XXX';
    $password = 'XXX';
    $ig = new Instagram();
    try {
        $ig->_setUser($username, $password);
    } catch (\Exception $e) {
        echo 'Something went wrong: '.$e->getMessage()."\n";
        exit(0);
    }
}

в этом коде яполучить эту ошибку:

"Call to protected method InstagramAPI\Instagram::_setUser() from context 'App\Http\Controllers\InstagramController'"

Ответы [ 3 ]

0 голосов
/ 28 октября 2018

Этот метод _setUser был публичным в предыдущих версиях.Разработчики API, похоже, рекомендуют использовать функцию login () для каждого вызова, и он проверит, нужно ли выполнять новый полный вход в систему, если это не нужно, будет вызываться _setUser.

Раньше вход в систему () для каждого запроса был очень медленным, но теперь, кажется, намного лучше с новыми версиями частного API.

0 голосов
/ 22 февраля 2019

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

protected function _login(
    $username,
    $password,
    $forceLogin = false,
    $appRefreshInterval = 1800)
{
    if (empty($username) || empty($password)) {
        throw new \InvalidArgumentException('You must provide a username and password to _login().');
    }
    // Switch the currently active user/pass if the details are different.
    if ($this->username !== $username || $this->password !== $password) {
        $this->_setUser($username, $password);
    }
    // Perform a full relogin if necessary.
    if (!$this->isMaybeLoggedIn || $forceLogin) {
        $this->_sendPreLoginFlow();
        try {
            $response = $this->request('accounts/login/')
                ->setNeedsAuth(false)
                ->addPost('phone_id', $this->phone_id)
                ->addPost('_csrftoken', $this->client->getToken())
                ->addPost('username', $this->username)
                ->addPost('adid', $this->advertising_id)
                ->addPost('guid', $this->uuid)
                ->addPost('device_id', $this->device_id)
                ->addPost('password', $this->password)
                ->addPost('login_attempt_count', 0)
                ->getResponse(new Response\LoginResponse());
        } catch (\InstagramAPI\Exception\InstagramException $e) {
            if ($e->hasResponse() && $e->getResponse()->isTwoFactorRequired()) {
                // Login failed because two-factor login is required.
                // Return server response to tell user they need 2-factor.
                return $e->getResponse();
            } else {
                // Login failed for some other reason... Re-throw error.
                throw $e;
            }
        }
        $this->_updateLoginState($response);
        $this->_sendLoginFlow(true, $appRefreshInterval);
        // Full (re-)login successfully completed. Return server response.
        return $response;
    }
    // Attempt to resume an existing session, or full re-login if necessary.
    // NOTE: The "return" here gives a LoginResponse in case of re-login.
    return $this->_sendLoginFlow(false, $appRefreshInterval);
}
0 голосов
/ 04 июня 2018

Для входа в систему вы можете использовать этот фрагмент:

$username = 'password';
$password =  'username';
$instagram = new Instagram(false, true, [
        'storage'    => 'mysql',
        'dbhost'     => 'localhost',
        'dbname'     => 'sessions',
        'dbusername' => 'root',
        'dbpassword' => '',
    ]);
$instagram->login($username, $password);

, а для доступа к идентификатору пользователя вы можете сделать это:

$instagram->people->getUserIdForName($username);

и после того, как вы успешно вошли в систему, попробуйте этотдля доступа к текущему пользователю:

$instagram->account->getCurrentUser()->getUser();
...