API de Instagram como m铆nimo

imagen

Todo comenz贸 con el hecho de que quer铆a hacer un canal en instagram pasando todo el d铆a buscando y probando servicios de publicaci贸n autom谩tica, luego decid铆 mirar los paquetes de github ya preparados, me sorprendi贸 el tama帽o del c贸digo de estos paquetes (algunos frameworks php son m谩s peque帽os que estos contenedores en instagram), Escup铆 y decid铆 escribir mi envoltorio con caracter铆sticas m铆nimas.

Iniciar sesi贸n


Pasaremos la autorizaci贸n a trav茅s de la versi贸n WEB. Para hacer esto, necesitaremos desde el principio obtener encabezados, cookies.

/**  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</b>,     header x-csrftoken    . 

 :
**/
$cookie = [];
preg_match_all("/Set-Cookie:\s*(?<cookie>[^=]+=[^;]+)/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     .
**/
}

Adem谩s, no dar茅 ejemplos del trabajo de CURL.

Autorizaci贸n:

/**  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 **/
{"authenticated": true, "user": true, "userId": "****", "loginNonce": "****", "reactivated": true, "status": "ok"}
 /**       json **/
{"authenticated": false, "user": true, "status": "ok"}
 /**          json    (     ) **/

B煤squeda de usuario


Para hacer esto, necesitaremos cookies previamente recibidas y el encabezado x-csrftoken.

/**  POST   https://www.instagram.com/web/search/topsearch/ **/
GET 
    https://www.instagram.com/web/search/topsearch/?context=blended&query={ }&rank_token={  0.87979}&include_ree=true
HEADER
     x-csrftoken: /**    csrftoken **/
     x-ig-app-id: 1217981644879628
     cookie: /**     **/
     user-agent: /**   **/
/**    **/
 {
    "users": [
                 {"position":0, 
                   "user":{
                               "pk":" "
                               "username":"  "
                               "full_name":" ,  "
                               .....    
                               }
                  },{},{}
    ],
    "places":[   ],
    "hashtags":[  ],
    "has_more": true,
    "rank_token": "0.44093530619864296",
    "clear_client_cache": false,
    "status: "ok"
}

Enviar mensajes a directo


Para enviar mensajes para dirigir, necesitamos una identificaci贸n de usuario a quien enviaremos, c贸mo encontrar a los usuarios que describ铆 anteriormente.

/**  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={   csrftoken}&recipient_users="[[   ]]"&action=send_item&thread_ids=["0"]&client_context={UUID v4  }
/**      **/
{"status":"ok", "payload":{"item_id":" "} ...}

/**   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));
    }

Subir fotos a trav茅s de la versi贸n WEB


Antes de enviar im谩genes, debe guardarlas en ImageJPEG quality 100; de lo contrario, el instagram devolver谩 un error:

$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);

Subir foto:

/**      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: {"media_type":1,"upload_id":"' . $microtime . '","upload_media_height":' . $height . ',"upload_media_width":' . $width . '}
     x-csrftoken: /**    csrftoken **/
     x-ig-app-id: 1217981644879628
     cookie: /**     **/
BODY
     /**  ,  body      **/
     file_get_contents(realpath($file_temp))
/**     json **/
{"upload_id":"   $microtime", "status":"ok" ...}
 
/**     ,        : **/
 
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   */
{"status":"ok", "media":{"id":"***", ...}}


Eso es todo, implement茅 un envoltorio m铆nimo sobre instagram.
Publiqu茅 la versi贸n de trabajo completa en github .
Estar茅 encantado de escuchar sobre la implementaci贸n, tal vez algo que hice mal.

Source: https://habr.com/ru/post/undefined/


All Articles