filesize(): сбой статистики при публикации видео с использованием twitter api | PHP

#php #twitter

#php #Twitter

Вопрос:

Здравствуйте, я пытаюсь загрузить видео с помощью twitter API TwitterAPIExchange.php

я работал над следующим

 <?php
    // include config and twitter api wrappe
    require_once( 'config.php' );
    require_once( 'TwitterAPIExchange.php' );

    // settings for twitter api connection
    $settings = array(
        'oauth_access_token' => TWITTER_ACCESS_TOKEN, 
        'oauth_access_token_secret' => TWITTER_ACCESS_TOKEN_SECRET, 
        'consumer_key' => TWITTER_CONSUMER_KEY, 
        'consumer_secret' => TWITTER_CONSUMER_SECRET
    );


// create new twitter for api communication
    $twitter = new TwitterAPIExchange( $settings );
    
// send image to Twitter first
$url = 'https://upload.twitter.com/1.1/media/upload.json';
$requestMethod = 'POST';

$media_path = 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/WhatCarCanYouGetForAGrand.mp4';

$postfields = array(
  "command" => "INIT",
          "total_bytes" => (int)filesize($media_path),
          'media_type' => 'video/mp4',
);

$response = $twitter->buildOauth($url, $requestMethod)
  ->setPostfields($postfields)
  ->performRequest();

// get the media_id from the API return
$media_id = json_decode($response)->media_id;
$fp = fopen($media_path, 'r');
$segment_id = 0;
while (! feof($fp)) {
    $chunk = fread($fp, 1048576); // 1MB per chunk for this sample
$postfieldschunk = array(
            "command" => "APPEND",
            "media_id" => $media_id,
            'media_data' => base64_encode($chunk),
            "segment_index" => $segment_id
);
    $response = $twitter->buildOauth($url, $requestMethod)
  ->setPostfields($postfieldschunk)
  ->performRequest();
    $segment_id  ;
}
$postfieldfinal = array(
            "command" => "FINALIZE",
          "media_id" => $media_id,
);
$response = $twitter->buildOauth($url, $requestMethod)
  ->setPostfields($postfieldfinal)
  ->performRequest();
    // twitter api endpoint
    $url = 'https://api.twitter.com/1.1/statuses/update.json';
    
    // twitter api endpoint request type
    $requestMethod = 'POST';

    // twitter api endpoint data
    $apiData = array(
        'status' => 'Hello World',
          'media_ids' => $media_id,

    );


    // make our api call to twiiter
    $twitter->buildOauth( $url, $requestMethod );
    $twitter->setPostfields( $apiData );
    $response = $twitter->performRequest( true, array( CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0 ) );

    // display response from twitter
    echo '<pre>';
    print_r( json_decode( $response, true ) );
?>
  

но получение

filesize(): сбой статистики для http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/WhatCarCanYouGetForAGrand.mp4 в E:wampwwwpostblog_codetwitter_tweet_phptweet.php в строке 26 я тоже попробовал сделать это таким образом

что я здесь делаю не так?

 <?php
    // include config and twitter api wrappe
    require_once( 'config.php' );
    require_once( 'TwitterAPIExchange.php' );

    // settings for twitter api connection
    $settings = array(
        'oauth_access_token' => TWITTER_ACCESS_TOKEN, 
        'oauth_access_token_secret' => TWITTER_ACCESS_TOKEN_SECRET, 
        'consumer_key' => TWITTER_CONSUMER_KEY, 
        'consumer_secret' => TWITTER_CONSUMER_SECRET
    );
    
// send image to Twitter first
$url = 'https://upload.twitter.com/1.1/media/upload.json';
$requestMethod = 'POST';

$image = 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4';

$postfields = array(
  'media_data' =>  base64_encode(file_get_contents($image))
);
// create new twitter for api communication
    $twitter = new TwitterAPIExchange( $settings );

$response = $twitter->buildOauth($url, $requestMethod)
  ->setPostfields($postfields)
  ->performRequest();

// get the media_id from the API return
$media_id = json_decode($response)->media_id;

    // twitter api endpoint
    $url = 'https://api.twitter.com/1.1/statuses/update.json';
    
    // twitter api endpoint request type
    $requestMethod = 'POST';

    // twitter api endpoint data
    $apiData = array(
        'status' => 'This tweet is comming from an awesome script written using php and the Twitter API! #Geek #PHP #TwitterAPI',
          'media_ids' => $media_id,

    );


    // make our api call to twiiter
    $twitter->buildOauth( $url, $requestMethod );
    $twitter->setPostfields( $apiData );
    $response = $twitter->performRequest( true, array( CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0 ) );

    // display response from twitter
    echo '<pre>';
    print_r( json_decode( $response, true ) );
?>
  

но при получении разрешенного объема памяти в 134217728 байт ошибка исчерпана (пытался выделить 65011744 байта)

может ли кто-нибудь подсказать мне, как я могу получить желаемое

Ответ №1:

Вы не можете указать файл через http-оболочку.

Скопируйте файл в файловую систему вашего сервера, затем прочитайте размер файла.

Комментарии:

1. Спасибо за ваш отличный ответ. вы сохранили его