Twitter API错误:“无效媒体”。怎么解决?

时间:2019-11-06 06:33:30

标签: c# twitter

我可以使用下面的示例代码上传gif和视频,但是当我尝试上传图像时,出现以下错误。我在INIT,APPEND和FINALIZE步骤中获得了成功,但是在检查MEDIA WITH TWEET步骤时却出现了错误。

INIT

        private static string path = @"..\Desktop\file.jpg";
        private static string size = new FileInfo(path).Length.ToString();

        var client = new RestClient("https://upload.twitter.com/1.1/media/upload.json")
        {
            Authenticator = RestSharp.Authenticators.OAuth1Authenticator.ForProtectedResource("consumerKey","consumerSecret","accessToken","accessTokenSecret")
        };

        var mimeType = MimeMapping.GetMimeMapping(path.Split('\\').Last());

        var request = new RestRequest(Method.POST);
        request.AddParameter("command", "INIT");
        request.AddParameter("total_bytes", size);
        request.AddParameter("media_type", mimeType);
        request.AddParameter("media_category", "tweet_image");

        IRestResponse response = client.Execute(request);

结果

{“ media_id”:1191965427213250561,“ media_id_string”:“ 1191965427213250561”,“ expires_after_secs”:86399,“ media_key”:“ 3_1191965427213250561”}

APPEND

        const int chunkSize = 2 * 1024 * 1024; //2MB 
        var fileArr = File.ReadAllBytes(path);
        var chkList = GetBinaryChunks(fileArr, chunkSize);
        var count = 0;
        foreach (var item in chkList)
        {
            var client1 = new RestClient("https://upload.twitter.com/1.1/media/upload.json")
            {
                Authenticator = RestSharp.Authenticators.OAuth1Authenticator.ForProtectedResource("consumerKey","consumerSecret","accessToken","accessTokenSecret")
            };
            var request1 = new RestRequest(Method.POST);                
            request1.AddHeader("Content-Type", "multipart/form-data");
            request1.AddParameter("command", "APPEND");
            request1.AddParameter("media_id", response.Data.media_id_string);
            request1.AddFileBytes("media", item, "test");
            request1.AddParameter("segment_index", count.ToString());

            IRestResponse response1 = client1.Execute(request1);
            count++;
        }

确定

        var client2 = new RestClient("https://upload.twitter.com/1.1/media/upload.json")
        {
            Authenticator = RestSharp.Authenticators.OAuth1Authenticator.ForProtectedResource("consumerKey","consumerSecret","accessToken","accessTokenSecret")
        };
        var request2 = new RestRequest(Method.POST);
        request2.AddHeader("Content-Type", "application/x-www-form-urlencoded");
        request2.AddParameter("command", "FINALIZE");
        request2.AddParameter("media_id", response.Data.media_id_string);

        IRestResponse response2 = client2.Execute(request2);

结果

{“ media_id”:1191965427213250561,“ media_id_string”:“ 1191965427213250561”,“ media_key”:“ 3_1191965427213250561”,“ size”:2504642,“ expires_after_secs”:86400,“ image”:{“ image_type”:“ image / jpeg“,” w“:5760,” h“:3840}}

带Tweet的媒体

         var client6 = new RestClient("https://api.twitter.com/1.1/statuses/update.json")
        {
            Authenticator = RestSharp.Authenticators.OAuth1Authenticator.ForProtectedResource("consumerKey","consumerSecret","accessToken","accessTokenSecret")
        };
        var request6 = new RestRequest(Method.POST);

        request6.AddParameter("status", "6mb jpg");
        request6.AddParameter("in_reply_to_status_id", "xxxxxxxxxxxxxxx");
        request6.AddParameter("media_ids", response.Data.media_id_string);

        IRestResponse response6 = client6.Execute(request6);

结果

{“错误”:[{“代码”:324,“消息”:“无效的媒体”}]}

0 个答案:

没有答案