Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Лень - самое главное качество программиста. Если программист не ленивый - он плохой программист.
- Да, да. Все именно так. Ведь только очень ленивый человек делает огромную работу единовременно, чтобы в будущем не делать практически ничего.
- Загружать фотографии в инстаграм мне было лень, но для моего проекта это было бы очень полезно, и я стал искать.
- В API самого инстаграма нет ничего интересного - поиск по фотографиям, изменение профиля, и все в этом духе. И ни слова как автоматически загрузить фотографию с комментарием.
- Это меня очень раздосадовало, и я обратился к своему самому главному помощнику - интернету.
- После нескольких часов поиска я нашел скрипт который более менее подходил под мои нужды, и немного подправил его.
- Ну и собственно, хочу поделиться им с вами.
- Для того чтобы запостить в инстаграм фотографию и текст нужна следующая функция
- sendInstagramm($image, $text);
- $image - Полный путь до изображения (отправляется с помощью cURL). Изображение должно быть квадратным, и должно быть локальным!
- загрузка по ссылке невозможна!
- $text - ваш текст. Для вставки переносов применяется "\n", с поддержкой хэштэгов (#тэг)
- Как видите - все достаточно просто. В ответ приходит статус, или ошибка (string)
- Если вам лень пользоваться скриптом, то узнав, что статья пользуется неплохой популярностью, я решил написать сервис IPosting для автоматической публикации изображений в instagram
- А вот собственно и сам код который все это делает*/
- <?php
- function SendRequest($url, $post, $post_data, $user_agent, $cookies) {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, 'https://instagram.com/api/v1/'.$url);
- curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
- if($post) {
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
- }
- if($cookies) {
- curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
- } else {
- curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
- }
- $response = curl_exec($ch);
- $http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
- curl_close($ch);
- return array($http, $response);
- }
- function GenerateGuid() {
- return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
- mt_rand(0, 65535),
- mt_rand(0, 65535),
- mt_rand(0, 65535),
- mt_rand(16384, 20479),
- mt_rand(32768, 49151),
- mt_rand(0, 65535),
- mt_rand(0, 65535),
- mt_rand(0, 65535));
- }
- function GenerateUserAgent() {
- $resolutions = array('720x1280', '320x480', '480x800', '1024x768', '1280x720', '768x1024', '480x320');
- $versions = array('GT-N7000', 'SM-N9000', 'GT-I9220', 'GT-I9100');
- $dpis = array('120', '160', '320', '240');
- $ver = $versions[array_rand($versions)];
- $dpi = $dpis[array_rand($dpis)];
- $res = $resolutions[array_rand($resolutions)];
- return 'Instagram 4.'.mt_rand(1,2).'.'.mt_rand(0,2).' Android ('.mt_rand(10,11).'/'.mt_rand(1,3).'.'.mt_rand(3,5).'.'.mt_rand(0,5).'; '.$dpi.'; '.$res.'; samsung; '.$ver.'; '.$ver.'; smdkc210; en_US)';
- }
- function GenerateSignature($data) {
- return hash_hmac('sha256', $data, 'b4a23f5e39b5929e0666ac5de94c89d1618a2916');
- }
- function GetPostData($filename) {
- if(!$filename) {
- echo "The image doesn't exist ".$filename;
- } else {
- $post_data = array('device_timestamp' => time(),
- 'photo' => '@'.$filename);
- return $post_data;
- }
- }
- function sendInstagramm($filename, $caption)
- {
- $username = _ВАШ_ЛОГИН_;
- $password = _ВАШ_ПАРОЛЬ_;
- $agent = GenerateUserAgent();
- $guid = GenerateGuid();
- $device_id = "android-" . $guid;
- $data = '{"device_id":"' . $device_id . '","guid":"' . $guid . '","username":"' . $username . '","password":"' . $password . '","Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"}';
- $sig = GenerateSignature($data);
- $data = 'signed_body=' . $sig . '.' . urlencode($data) . '&ig_sig_key_version=4';
- $login = SendRequest('accounts/login/', true, $data, $agent, false);
- $text = '';
- if (strpos($login[1], "Sorry, an error occurred while processing this request.")) {
- $text .= "Request failed, there's a chance that this proxy/ip is blocked";
- return $text;
- }
- if (empty($login[1])) {
- $text .= "Empty response received from the server while trying to login";
- return $text;
- }
- $obj = @json_decode($login[1], true);
- if (empty($obj)) {
- $text .= "Could not decode the response" ;
- return $text;
- }
- $data = GetPostData($filename);
- $post = SendRequest('media/upload/', true, $data, $agent, true);
- if (empty($post[1])) {
- $text .= "Empty response received from the server while trying to post the image";
- return $text;
- }
- $obj = @json_decode($post[1], true);
- if (empty($obj)) {
- $text .= "Could not decode the response";
- return $text;
- }
- $status = $obj['status'];
- if ($status != 'ok') {
- $text .= "Status isn't okay";
- return $text;
- }
- $media_id = $obj['media_id'];
- $device_id = "android-" . $guid;
- $data = (object)array(
- 'device_id' => $device_id,
- 'guid' => $guid,
- 'media_id' => $media_id,
- 'caption' => trim($caption),
- 'device_timestamp' => time(),
- 'source_type' => '5',
- 'filter_type' => '0',
- 'extra' => '{}',
- 'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8',
- );
- $data = json_encode($data);
- $sig = GenerateSignature($data);
- $new_data = 'signed_body=' . $sig . '.' . urlencode($data) . '&ig_sig_key_version=4';
- $conf = SendRequest('media/configure/', true, $new_data, $agent, true);
- if (empty($conf[1])) {
- $text .= "Empty response received from the server while trying to configure the image";
- } else {
- if (strpos($conf[1], "login_required")) {
- $text .= "You are not logged in. There's a chance that the account is banned";
- } else {
- $obj = @json_decode($conf[1], true);
- $status = $obj['status'];
- if ($status != 'fail') {
- $text .= "Success";
- } else {
- $text .= 'Fail';
- }
- }
- }
- return $text;
- }
- //Вам остается только заменить строки 75 - 76
- $username = _ВАШ_ЛОГИН_;
- $password = _ВАШ_ПАРОЛЬ_;
- /*Все - теперь с помощью этого удобного скрипта можно автоматизировать еще один рутинный процесс.
- Всем спасибо за внимание.
- PS
- Изображение должно быть квадратным
- Изображение должно быть локальынм - лежать на машине со скриптом. По ссылке НЕ РАБОТАЕТ.
- Не забудьте установить необходимые права на файлы для никсов
- Сервис IPosting - для тех кто не умеет, у кого не получается, или кому просто лень ;)*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement