Частный Instagram InstagramAPI\Instagram::_setUser() ошибка
Я пытаюсь реализовать 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'"
2 ответа
Этот метод _setUser был публичным в предыдущих версиях. Разработчики API, похоже, рекомендуют использовать функцию login() для каждого вызова, и она проверит, нужно ли выполнять новый полный вход в систему, если это не нужно, будет вызываться _setUser.
В прошлом выполнение login() для каждого запроса было очень медленным, но теперь, кажется, намного лучше с новыми версиями частного API.
Функция _setUser является приватной, вы можете редактировать функцию Private в Public, тогда только вы можете использовать эту функцию, и даже если вы ее не измените, будет автоматически выбран метод _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);
}
Для входа в систему вы можете использовать этот фрагмент:
$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();