2

C# を使用して Twitter アカウントに画像を投稿したいと考えています。アクセス トークン コードを取得できます。すべて問題ありませんが、PHP コードを調査しました

 $tmhOAuth = new tmhOAuth(array(
                    'consumer_key'    => OAUTH_CONSUMER_KEY,
                    'consumer_secret' => OAUTH_CONSUMER_SECRET,
                    'user_token'      => $oauth_token,
                    'user_secret'     => $oauth_token_secret,
            ));

            $image = "{$_FILES['image']['tmp_name']};type={$_FILES['image']['type']};filename={$_FILES['image']['name']}";

            $code = $tmhOAuth->request('POST', 'https://upload.twitter.com/1/statuses/update_with_media.json',
array(
      'media[]'  => "@{$image}",
      'status'   => " " . $status, //A space is needed because twitter b0rks if first char is an @
      'lat'          => $lat,
      'long'         => $long,
),
true, // use auth
true  // multipart

PHP コードでは、OAuthクラスに request メソッドがあります。OAuthC# 側では、クラス内にリクエスト メソッドを持たない Twitterizer ライブラリを使用しました。次にWebclient、リクエストメソッドの代わりに使用しました。しかし、データを投稿するには資格情報が必要です。しかし、ユーザー名とパスワードを何に、なぜ使用するのかわかりません。実際には、資格情報を使用したくありません。認証情報の代わりに何を使用できますか?

2 番目の問題は、常に承認済みエラー (401) が発生することです。コードは次のとおりです。

  OAuthTokenResponse responseToken = OAuthUtility.GetAccessToken(ConsumerKey, ConsumerSecret, oauth_token, oauth_verifier);
    OAuthTokens accessToken = new OAuthTokens();
    accessToken.AccessToken = responseToken.Token;
    accessToken.AccessTokenSecret = responseToken.TokenSecret;
    accessToken.ConsumerKey = ConsumerKey;
    accessToken.ConsumerSecret = ConsumerSecret;

    TwitterResponse<TwitterUser> twitterResponse = TwitterAccount.VerifyCredentials(accessToken);
    System.Net.ServicePointManager.Expect100Continue = false;
    if (twitterResponse.Result != RequestResult.Unauthorized)
    {
        try
        {
           string URL = "https://upload.twitter.com/1/statuses/update_with_media.json";

            WebClient client = new WebClient();

            client.Credentials = new System.Net.NetworkCredential(uName, pass);
            NameValueCollection postData = new NameValueCollection();
            postData.Add("status", status);
            postData.Add("media[]", Encoding.ASCII.GetString(bytesOfImage));
            byte[] b = client.UploadValues(URL, "POST", postData); // 401 error.
        }
        catch (Exception e)
        {
            return e.Message;
        }

では、私のコードのどこに問題があるのでしょうか?

4

1 に答える 1

3

次のように、TweetWithMedia メソッドを使用して、LINQ to Twitter でこれを行うことができます。

    static void TweetWithMediaDemo(TwitterContext twitterCtx)
    {
        string status = "Testing TweetWithMedia #Linq2Twitter " + DateTime.Now.ToString(CultureInfo.InvariantCulture);
        const bool possiblySensitive = false;
        const decimal latitude = StatusExtensions.NoCoordinate; //37.78215m;
        const decimal longitude = StatusExtensions.NoCoordinate; // -122.40060m;
        const bool displayCoordinates = false;

        const string replaceThisWithYourImageLocation = @"..\..\images\200xColor_2.png";

        var mediaItems =
            new List<Media>
            {
                new Media
                {
                    Data = Utilities.GetFileBytes(replaceThisWithYourImageLocation),
                    FileName = "200xColor_2.png",
                    ContentType = MediaContentType.Png
                }
            };

        Status tweet = twitterCtx.TweetWithMedia(
            status, possiblySensitive, latitude, longitude, 
            null, displayCoordinates, mediaItems, null);

        Console.WriteLine("Media item sent - Tweet Text: " + tweet.Text);
    }

ジョー

于 2012-06-13T22:57:42.603 に答える