- Saved searches
- Use saved searches to filter your results more quickly
- License
- julionc/php-instagram
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Instagram api на минималках
- Авторизация
- Поиск пользователей
- Отправка сообщений в direct
- Загрузка фотографий через WEB версию
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
julionc / php-instagram Public archive
A Simple PHP library for the Instagram API
License
julionc/php-instagram
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
A PHP library for the Instagram API
require_once('vendor/autoload.php'); $config = array( 'client_id' => 'YOUR_CLIENT_ID', 'client_secret' => 'YOUR_CLIENT_SECRET', 'redirect_uri' => 'CALLBACK_URL', 'scope' => array('basic') ); $client = new Instagram\Auth($config); // In view, get the Authorize URL $client->authorize_url();
// profile.php // Preload the settings and capture the access code (Callback step). if (!$access_token) < $client = new Instagram\Auth($config); $client->requestAccessToken($access_code); $_SESSION['access_token'] = $client->getAccessToken(); > $instagram = new \Instagram\Instagram($access_token, 'secret_key_here');
If you do not wish to put your client credentials in your code (understandable), simply set it to the environment variable instagram.client_id and instagram.client_secrect . So php-instagram will automatically pick it up. See example folder.
$instagram = new \Instagram\Instagram($access_token); // Get basic information about a user. $user = $instagram->user->info(); // See the authenticated user's feed. $feed = $instagram->user->feed(); // Get the most recent media published by a user. $media = $instagram->user->media();
About
A Simple PHP library for the Instagram API
Instagram api на минималках
Все началось с того, что я захотел сделать канал в инстаграме потратив на поиски и тесты сервисов авто публикаций целый день, далее я решил посмотреть на готовые пакеты гитхаба я удивился на размер кода этих пакетов (некоторые фреймворки php меньше чем эти обертки над инстаграмом), я плюнул и решил написать свою обертку с минимальными возможностями.
Авторизация
Авторизацию будем проходить через WEB версию. Для этого нам понадобится с начало получить заголовки, куки.
/** Отправляем GET запрос на https://www.instagram.com**/ $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => 'https://www.instagram.com/', CURLOPT_HEADER => true, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_RETURNTRANSFER => true, CURLINFO_HEADER_OUT => true, CURLOPT_HTTPHEADER => ['user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'], ]); $response = curl_exec($curl); $headers = curl_getinfo($curl); /** обрезаем лишнее из headers **/ $header_content = substr($response, 0, $headers['header_size']); curl_close($curl); /** Для нас важен кукис csrftoken, его мы устанавливаем в header x-csrftoken для дальнейшего запроса авторизации. Парсим куки: **/ $cookie = []; preg_match_all("/Set-Cookie:\s*(?[^=]+=[^;]+)/mi", $header_content, $matches); foreach ($matches['cookie'] as $c) < if ($c = str_replace(['sessionid=""', 'target=""'], '', $c)) < $c = explode('=', $c); $cookie = array_merge($cookie, [trim($c[0]) =>trim($c[1])]); > > if (isset($cookie['csrftoken']) < /** проверяем вернул установил нам инстаграм кукис csrftoken если нет куки возможно ваш IP или Прокси в черных списках. **/ >
Дальше я не буду приводить примеры с работой CURL.
/** отправляем POST запрос на https://www.instagram.com/accounts/login/ajax/ **/ POST https://www.instagram.com/accounts/login/ajax/ HEADER Content-Type: application/x-www-form-urlencoded /** id app можно взять из заголовков инстаграм (не стал искать каким хуком он ставится) он всегда один и тот же **/ x-ig-app-id: 1217981644879628 x-csrftoken: /** полученный ранее кукис csrftoken **/ cookie: /** Все полученные куки ранее **/ user-agent: /** установленный ранее **/ BODY username=/** логин инстаграм **/&password=/** пароль инстаграм **/&queryParams=<>&optIntoOneTap=false /** Если запрос прошел удачно и мы Авторизовались ответ json, сохраняем куки которые вернул нам сервер и userId **/ /** Если неверный логин или пароль ответ json **/ /** В любых других случаях если ответ не в формате json и присутствуют редиректы (вы что то делаете не так) **/
Поиск пользователей
Для этого нам потребуются ранее полученные куки и заголовок x-csrftoken.
/** отправляем POST запрос на https://www.instagram.com/web/search/topsearch/ **/ GET https://www.instagram.com/web/search/topsearch/?context=blended&query=&rank_token=&include_ree=true HEADER x-csrftoken: /** полученный ранее кукис csrftoken **/ x-ig-app-id: 1217981644879628 cookie: /** Все полученные куки ранее **/ user-agent: /** установленный ранее **/ /** Ответ от сервера **/ < "users": [ >,<>,<> ], "places":[публикации по месту положения], "hashtags":[публикации с хештагеми], "has_more": true, "rank_token": "0.44093530619864296", "clear_client_cache": false, "status: "ok" >
Отправка сообщений в direct
Для отправки сообщений в директ нам потребуются id юзеров кому будем отправлять, как найти пользователей я описал выше.
/** Отправляем POST запрос на api instagram **/ POST https://i.instagram.com/api/v1/direct_v2/threads/broadcast/text/ HEADER /** юзер агент обязательно используем мобильного устройства **/ user-agent: Instagram 10.2.2 Android (18/4.3; 320dpi; 720x1280; Huawei; HWEVA; EVA-L18; qcom; en_US) x-csrftoken: /** полученный ранее кукис csrftoken **/ x-ig-app-id: 1217981644879628 cookie: /** Все полученные куки ранее **/ content-type: application/x-www-form-urlencoded BODY text=&_uuid=&_csrftoken=&recipient_users="[[ид пользоветелей через запятую]]"&action=send_item&thread_ids=["0"]&client_context= /** Успешный ответ Ответ от сервера **/ . > /** пример генерации UUID v4 **/ function uuid4() < if (function_exists('com_create_guid') === true) < return trim(com_create_guid(), '<>'); > $data = openssl_random_pseudo_bytes(16); $data[6] = chr(ord($data[6]) & 0x0f | 0x40); $data[8] = chr(ord($data[8]) & 0x3f | 0x80); return vsprintf('%s%s%s%s%s%s%s%s', str_split(bin2hex($data), 4)); >
Загрузка фотографий через WEB версию
Перед отправкой изображений нужно их сохранить в ImageJPEG качество 100 иначе инстаграм вернет ошибку:
$photo = __DIR__ . '/source.jpg'; $file_temp = __DIR__ . '/send_images.jpg'; list($width, $height, $image_type) = getimagesize(realpath($photo)); $srcImage = ImageCreateFromJPEG($photo); $resImage = ImageCreateTrueColor($width, $height); ImageCopyResampled($resImage, $srcImage, 0, 0, 0, 0, $width, $height, $width, $height); ImageJPEG($srcImage, $file_temp, 100); ImageDestroy($srcImage);
/** Для загрузки изображения нужно отправить POST запрос **/ /** $microtime получаем время в microtime это будет наш id photo **/ $microtime = round(microtime(true) * 1000); POST https://www.instagram.com/rupload_igphoto/fb_uploader_' . $microtime HEADER content-type: image/jpg x-entity-name: 'fb_uploader_' . $microtime /** id photo **/ offset: 0 user-agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X; ru-RU) AppleWebKit/537.36 (KHTML, like Gecko) Version/11.4.1 Mobile/15G77 Safari/537.36 Puffin/5.2.2IP x-entity-length: filesize($file_temp) /** Размер фото **/ x-instagram-rupload-params: x-csrftoken: /** полученный ранее кукис csrftoken **/ x-ig-app-id: 1217981644879628 cookie: /** Все полученные куки ранее **/ BODY /** Без параметров, в body должно быть только фото **/ file_get_contents(realpath($file_temp)) /** Успешный ответ от сервера json **/ /** На этом еще не все, мы только загрузили фото теперь его надо опубликовать: **/ POST https://www.instagram.com/create/configure/ HEADER content-type: application/x-www-form-urlencoded user-agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X; ru-RU) AppleWebKit/537.36 (KHTML, like Gecko) Version/11.4.1 Mobile/15G77 Safari/537.36 Puffin/5.2.2IP x-csrftoken: /** полученный ранее кукис csrftoken **/ x-ig-app-id: 1217981644879628 cookie: /** Все полученные куки ранее **/ BODY upload_id=$microtime&caption=&usertags=&custom_accessibility_caption=&retry_timeout= /** Успешный ответ от сервера в json должен содержать */ >