abraham / twitteroauth

The most popular PHP library for use with the Twitter OAuth REST API.
https://twitteroauth.com
MIT License
4.29k stars 1.71k forks source link

Help triying to make it work! Screenshot from twitch! #516

Closed ck36 closed 7 years ago

ck36 commented 7 years ago

Hi! first of all sorry for my bad English i got this Twitter bot that twits a Twitchtv channel whit game info and screenshot but I unable to make it work at full is Twiting but No screenshot here is the code please someone help i just spend like 2 months on it whit no luck

<?php

//require_once __DIR__ . '/TwitterOAuth/TwitterOAuth.php';
//require_once __DIR__ . '/TwitterOAuth/Exception/TwitterException.php';

require "TwitterOAuth/autoload.php";

use Abraham\TwitterOAuth\TwitterOAuth;

//use TwitterOAuth\TwitterOAuth;

date_default_timezone_set('UTC');

/*
* Array with the OAuth tokens provided by Twitter when you create application
*
* output_format - Optional - Values: text|json|array|object - Default: object
*/

$access_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // Cambiar este valor por el tuyo
$access_token_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // Cambiar este valor por el tuyo

//Instantiate TwitterOAuth class with set tokens

$tw = new TwitterOAuth('xxxxxxxxxxxxxxxxxxxx', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', $access_token, $access_token_secret); // Cambiar CONSUMER_KEY y CONSUMER_SECRET por los tuyos
$content = $tw->get("account/verify_credentials");

//-----------AQUÍ SE DEFINE LA LISTA DE CANALES-----------

$canales=["chikarkas36", "TuCODmexico", "XabuGames", "madbutcher10", "s0ulreaper2180", "wichynem", "pangoiin", "RaezerCraft", "manzanoidus", "mrwizemurlock"]; // Aquí va la lista de canales a compartir, cada uno entre comillas
$twitter=["chikarkas36" => "@chikarkas36", "TuCODmexico" => "@TuCODmexico", "XabuGames" => "@xabu1legacy", "madbutcher10" => "@MadBUTCHERBEST", "s0ulreaper2180" => "@s0ulreaper2180", "wichynem" => "@Wichy_", "pangoiin" => "@MaarcoTeran", "RaezerCraft" => "@RaezerCraft", "manzanoidus" => "@Manzanoidus", "mrwizemurlock" => "@WMurlock"]; // Asignamos cada canal a un usuario de Twitter, si no tiene Twitter, se puede repetir el usuario como en el ejemplo de canal_3. Cada cosa entre comillas

//-----------AQUÍ SE PONE EL CLIENT ID DE TWITCH PARA PODER LLAMAR A LA API----------- Revisar: https://blog.twitch.tv/client-id-required-for-kraken-api-calls-afbb8e95f843

$clientId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // Cambiar este valor por el tuyo

//----------------------------------------------------------- 

for($i = 0; $i < 20; $i++){ // El programa hará 20 intentos para encontrar un canal que esté en vivo, apenas encuentre uno lo publicará; si no hay canales en vivo, no se publicará nada

    $var = rand(0, count($canales) - 1); //Elige un canal aleatorio

    //----Mandamos request a Twitch para ver la info del stream----

    $ch = curl_init();

    curl_setopt_array($ch, array(
       CURLOPT_HTTPHEADER => array(
          'Client-ID: ' . $clientId
       ),
       CURLOPT_RETURNTRANSFER => true,
       CURLOPT_URL => 'https://api.twitch.tv/kraken/streams/' . $canales[$var]
    ));

    $response = curl_exec($ch);
    curl_close($ch);

    $json_array = json_decode($response, true); //No he probado si esto efectivamente regresa el json

    //----Revisamos si el stream está en vivo----

    if($json_array['stream'] != null){

        $tweet = creaTweet($response, $canales[$var]); // Pedimos el texto que se publicará enviando el json del canal y su nombre

        $response = $tw->post('statuses/update', $tweet); // Se postea el tweet - no estoy segura si esta función sigue vigente

        break;

    }

}

function creaTweet($result, $streamName){ //Devuelve un array con imagen y texto

    $pathImagen = $result['stream']['preview']['large']; // Obtenemos un screenshot del stream

    $imagen = $GLOBALS["tw"]->upload('media/upload', array('media' => $pathImagen));

    $texto = creaFrase($result, $streamName); // Crea el texto del tweet

    $post = array(

        'status' => $texto,

        'media_ids' => implode(',', array($imagen->media_id_string))

    );

    return $post;

 }

function creaFrase($result, $streamName){

    $user = getHandle($streamName); //Obtiene el usuario de Twitter del stream a compartir

    while($flag = true){ //Se usan frases específicas para Gaming Talk Shows, Creative y demás

        if($result['stream']['game'] == "Gaming Talk Shows"){

            $frase = "Ven y convive con " . $user . " mientras platica con sus viewers: ";

        }else if($result['stream']['game'] == "Creative"){

            $frase = "Si buscas creatividad, ¡debes ver a " . $user . "! En vivo ahora: ";

        }else if($result['stream']['game'] == "Music"){

            $frase = "¿Ganas de música? ¡Entra al stream de " . $user . "! ";

        }else if($result['stream']['game'] == "Social Eating"){

            $frase = "¡" . $user . " está en stream antojándonos de su comida! ";

        }else{

            switch (rand(0, 3)){ //Elige con qué frase se va a compartir 
                case 0:
                    $frase = "¡Acompaña a " . $user . " mientras juega " . $result['stream']['game'] . "! ";

                    break;

                case 1:
                    $frase = "Aquí anda " . $user . " jugando " . $result['stream']['game'] . ". ¡entra a pasar el rato! ";
                    break;

                case 2:
                    $frase = "¿Ganas de " . $result['stream']['game'] . "? ¡" . $user . " lo está jugando en su canal! ";
                    break;

                case 3:
                    $frase = "Si te gusta " . $result['stream']['game'] . ", aprovecha que " . $user . " lo está streameando: ";
                    break;

            }

        }

        if((strlen(utf8_decode($frase)) + 22 ) <= 140){ //Verifica que la longitud del tweet sea suficiente; la URL en Twitter siempre ocupa 22 caracteres

            $frase .= 'twitch.tv/' . $streamName;

            return $frase;

            $flag = false;

            break;

        }

    }

}

function getHandle($user){ //Obtiene el usuario de Twitter del canal a compartir

    $twitter = $GLOBALS["twitter"];

    return $twitter[$user]; // Devuelve el Twitter del usuario correspondiente

}
ck36 commented 7 years ago

Bump

abraham commented 7 years ago

It looks like $result['stream']['preview']['large'] is probably a URL? The TwitterOAuth media API requires a path to a file on the local server.

ck36 commented 7 years ago

Sorry Abraham so what i need to do ? I not good whit coding do you do pay jobs?

abraham commented 7 years ago

You need to download the image from that URL, save it to a temporary directory on your server, and use that new path as the value of media.