首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Twitter API发布媒体

通过Twitter API发布媒体
EN

Stack Overflow用户
提问于 2018-03-08 14:01:53
回答 1查看 537关注 0票数 0

我正在使用Twitter将媒体发布到我的Twitter帐户。在我的例子中,我通过每分钟运行的cron任务(从DB获取数据并在date == now时发送数据)。

文字和图片是正确张贴,但我有一个问题,当我试图张贴一个视频。

到目前为止,我的情况如下:

控制台命令:

代码语言:javascript
复制
public function handle()
{

    Log::useDailyFiles(storage_path() . '/logs/post_schedule.log');

    $posts = Preview::getUnprocessed();

    foreach ($posts as $key => $post) {
        $date_to = Carbon::parse($post->date_send);

        if (("Twitter" === ucfirst($post->social)) && ($date_to->lt(Carbon::now()))) {
            Log::info('***************** start sending*****************');
            dump('sending');

            try
            {
                $this->postTwitter($post);
            } catch (\Exception $e) {
                dump($e->getMessage());
            }

            Log::info('***************** post:' . $post->id . ' at date : ' . $date_to . ' *****************');
            $post->state = true;
            $post->save();

            Log::info('***************** finsih sending *****************');
        }
    }
} 

Twitter发布功能:

代码语言:javascript
复制
public static function postTwitter($post)
{

    $tweet = ['tweet' => $post->content];
    $images = $post->uploads;
    $newTwitte = ['status' => $tweet];

    if (!empty($images)) {
        foreach ($images as $key => $value) {
            $uploaded_media = Twitter::uploadMedia(['media' => File::get(public_path($value->filename))], true);
            if (!empty($uploaded_media)) {
                $newTwitte['media_ids'][$uploaded_media->media_id_string] = $uploaded_media->media_id_string;
            }
        }
    }

    $twitter = Twitter::postTweet($newTwitte);
}

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2018-03-13 10:18:24

在使用了亚伯拉罕\TwitterOAuth\TwitterOAuth包之后,我对函数做了一些修改。Twitter发布功能:

代码语言:javascript
复制
public function postTwitter($post)
    {
        $images = $post->uploads;

        $ids = [];   
        foreach ($images as $key => $value) 
        {
            $file = public_path($value->filename);
            $extension = File::extension($file);

            if ($extension == "mp4") 
            {

                $data['media']      = $file;
                $data['media_type'] = 'video/mp4';
                $code  = $this->connection->upload('media/upload', $data, true);
                $parameters = [
                    'status' => $post->content,
                    'media_ids' => $code->media_id_string,
                ];
                $result = $this->connection->post('statuses/update', $parameters);
            }
            else
            {     
                $code  = $this->connection->upload('media/upload',['media' => $file], false);

            }


            $ids[] = $code->media_id_string;

        }

        $parameters = [
            'status' => $post->content,
            'media_ids' => implode(',',$ids),
        ];

        $result = $this->connection->post('statuses/update', $parameters);

    }

这个函数工作得非常好,所以您必须配置您的:

TWITTER_CONSUMER_KEY

TWITTER_CONSUMER_SECRET

TWITTER_ACCESS_TOKEN

TWITTER_ACCESS_TOKEN_SECRET

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49174956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档