2012-04-23 3 views
1

Je veux publier une image sur mon compte Twitter via C#. Je peux obtenir le code jeton d'accès, tout va bien mais j'étudié un code PHPComment poster une image sur Twitter en C#

$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 

Dans le code PHP, la classe OAuth a une méthode de requête. Côté C#, j'ai utilisé la librairie Twitterizer qui n'a pas de méthode de requête dans la classe OAuth. Ensuite, j'ai utilisé Webclient au lieu de la méthode de demande. Mais j'ai besoin de quelques informations d'identification pour publier des données. Mais je ne sais pas quoi/pourquoi j'utilise un nom d'utilisateur et un mot de passe. En fait, je ne veux pas utiliser d'informations d'identification. Que puis-je utiliser à la place des informations d'identification?

Le deuxième problème est, je reçois toujours des erreurs autorisées (401) ici est le code

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; 
     } 

Alors, où est le problème dans mon code?

+0

A 401 est un 401. Je soupçonne UNAME ou passe est invalide ou le type auth utilisé n'est pas supporté. Utilisez un outil comme fiddler2 pour jeter un coup d'oeil. (On pourrait imaginer que OAuth devrait être utilisé * à la place * de HTTP Auth .. donc le paramètre client.Credentials ne fait qu'aggraver le problème.) –

+0

Que dois-je faire? – user1350342

+0

Trouver un tutoriel sur la façon d'utiliser Twitter à partir de C#? Tu n'es pas la première personne à avoir essayé ça ... –

Répondre

1

Vous pouvez le faire dans LINQ à Twitter, en utilisant la méthode TweetWithMedia, comme ceci:

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); 
    } 

Joe

Questions connexes