<commit_before><?php
namespace InstagramMedia;

use Exception;

/**
 * Classe simples para obter as postagens para um determinado perfil público no
 * instagram e retornar os dados básicos da postagem
 *
 * @author <NAME>
 * @version 1.0
 * @license The MIT License (MIT)
 */
class InstagramMedia
{
    /**
     * URL do instagram
     * @access public
     * @var string
     */
    const URL = 'https://www.instagram.com/';

    /**
     * Nome da conta de usuário para obter as mídias
     * @access private
     * @var string
     */
    private $userId = '';

    /**
     * Construtor da classe
     * @param string $userId
     */
    public function __construct($userId = '')
    {
        if (!empty($userId)) {
            $this->setUserId($userId);
        }
    }

    /**
     * @access public
     * @param string $userId
     * @return \InstagramMedia
     * @throws Exception
     */
    public function setUserId($userId = '')
    {
        if (empty($userId)) {
            throw new Exception(__('ID do usuário não informado!'));
        }
        $this->userId = $userId;
        return $this;
    }

    /**
     * Retorna o nome de usuário o qual se quer obter os posts
     * @access public
     * @return string
     * @throws Exception
     */
    public function getUserId()
    {
        if (empty($this->userId)) {
            throw new Exception('Usuário não informado');
        } else {
            return $this->userId;
        }
    }

    /**
     * Retorna a lista de posts que o usuário informado possui contendo também
     * os likes, comentários e dados relacionados à postagem
     *
     * @access public
     * @param integer $qtd Quantidade de mídias a serem retornada
     * @return array
     *    [
     *         'link' => URL do Post
     *         'type' => Tipo do Post,
     *         'thumb' => URL da imagem do thumbnail,
     *         'low' => URL da imagem em baixa resolução
     *         'std' => URL da imagem em resolução padrão
     *         'qtd_likes' => Quantidade de likes
     *         'qtd_comments' => Quantidade de comentários
     *     ]
     */
    public function getMedia($qtd = 20)
    {
        $data = json_decode($this->getJsonMedia());
        if (!isset($data->items)) {
            return [];
        }
        $retorno = [];
        $i = 0;
        foreach ($data->items as $post) {
            $retorno[] = [
                'link' => $post->link,
                'type' => $post->type,
                'thumb' => $post->images->thumbnail->url,
                'low' => $post->images->low_resolution->url,
                'std' => $post->images->standard_resolution->url,
                'qtd_likes' => $post->likes->count,
                'qtd_comments' => $post->comments->count,
            ];
            $i++;
            if ($i >= $qtd) {
                break;
            }
        }
        return $retorno;
    }

    /**
     * Efetua a chamada à URL
     * @access private
     * @return string JSON com os dados dos posts
     */
    private function getJsonMedia()
    {
        $header = [
            'Accept-Language: en-US;q=0.6,en;q=0.4',
            'Connection: keep-alive',
            'Content-Length: 0',
            'Host: www.instagram.com',
            'Origin: https://www.instagram.com',
            'Referer: https://www.instagram.com/',
            'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36',
            'X-Instagram-AJAX: 1',
            'X-Requested-With: XMLHttpRequest'
        ];
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_URL, self::URL . $this->getUserId() . '/media/');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_ENCODING, '');
        curl_setopt($ch, CURLOPT_TIMEOUT, 20);
        curl_setopt($ch, CURLOPT_HEADER, false);
        $result = curl_exec($ch);
        curl_close($ch);<commit_msg>Atualizado o método getMedia<commit_after><?php
namespace InstagramMedia;

use Exception;

/**
 * Classe simples para obter as postagens para um determinado perfil público no
 * instagram e retornar os dados básicos da postagem
 *
 * @author <NAME>
 * @version 1.0
 * @license The MIT License (MIT)
 */
class InstagramMedia
{
    /**
     * URL do instagram
     * @access public
     * @var string
     */
    const URL = 'https://www.instagram.com/';

    /**
     * Nome da conta de usuário para obter as mídias
     * @access private
     * @var string
     */
    private $userId = '';

    /**
     * Construtor da classe
     * @param string $userId
     */
    public function __construct($userId = '')
    {
        if (!empty($userId)) {
            $this->setUserId($userId);
        }
    }

    /**
     * @access public
     * @param string $userId
     * @return \InstagramMedia
     * @throws Exception
     */
    public function setUserId($userId = '')
    {
        if (empty($userId)) {
            throw new Exception(__('ID do usuário não informado!'));
        }
        $this->userId = $userId;
        return $this;
    }

    /**
     * Retorna o nome de usuário o qual se quer obter os posts
     * @access public
     * @return string
     * @throws Exception
     */
    public function getUserId()
    {
        if (empty($this->userId)) {
            throw new Exception('Usuário não informado');
        } else {
            return $this->userId;
        }
    }

    /**
     * Retorna a lista de posts que o usuário informado possui contendo também
     * os likes, comentários e dados relacionados à postagem
     *
     * @access public
     * @param integer $qtd Quantidade de mídias a serem retornada
     * @return array
     *    [
     *         'link' => URL do Post
     *         'type' => Tipo do Post,
     *         'thumb' => URL da imagem do thumbnail,
     *         'low' => URL da imagem em baixa resolução
     *         'std' => URL da imagem em resolução padrão
     *         'qtd_likes' => Quantidade de likes
     *         'qtd_comments' => Quantidade de comentários,
     *         'caption' => Texto do post
     *     ]
     */
    public function getMedia($qtd = 20)
    {
        $data = json_decode($this->getJsonMedia());
        if (!isset($data->items)) {
            return [];
        }
        $retorno = [];
        $i = 0;
        foreach ($data->items as $post) {
            $retorno[] = [
                'link' => $post->link,
                'type' => $post->type,
                'thumb' => $post->images->thumbnail->url,
                'low' => $post->images->low_resolution->url,
                'std' => $post->images->standard_resolution->url,
                'qtd_likes' => $post->likes->count,
                'qtd_comments' => $post->comments->count,
                'caption' => $post->caption->text
            ];
            $i++;
            if ($i >= $qtd) {
                break;
            }
        }
        return $retorno;
    }

    /**
     * Efetua a chamada à URL
     * @access private
     * @return string JSON com os dados dos posts
     */
    private function getJsonMedia()
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, self::URL . $this->getUserId() . '/media/');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_ENCODING, '');
        curl_setopt($ch, CURLOPT_TIMEOUT, 20);
        curl_setopt($ch, CURLOPT_HEADER, false);
        $result = curl_exec($ch);
        curl_close($ch);
{'fraction_non_alphanumeric': 0.13070408292251295, 'fraction_numerical': 0.006193907217798003, 'mean_word_length': 1.7839549612948629, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 85, 'https://': 4, 'lorem ipsum': 0, 'www.': 5, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3089412', 'n_tokens_mistral': 2528, 'n_tokens_neox': 2466, 'n_words': 608}