MonsterMMORPG MonsterMMORPG - 1 year ago 60
C# Question

How to use linqtotwitter V3

Alright I recently upgraded to V3 but it broken many things

How can I fix these ?

Number 1 :

This is not working anymore no such definition as Credentials and InMemoryCredentials

var auth = new SingleUserAuthorizer
Credentials = new InMemoryCredentials
ConsumerKey = srtwitterConsumerKey,
ConsumerSecret = srtwitterConsumerSecret,
OAuthToken = srtwitterOAuthToken,
AccessToken = srtwitterAccessToken

Number 2 : no definition for GetFileBytes anymore

var mediaItems =
new List<Media>
new Media
Data = Utilities.GetFileBytes(srImageUrl),
FileName = srTweet.Split(' ')[0]+".jpg",
ContentType = MediaContentType.Jpeg

Number 3 : no definition for TweetWithMedia

var tweet = twitterContext.TweetWithMedia(srTweet, false, mediaItems);

Number 4 : no definition for UpdateStatus

var tweet = twitterContext.UpdateStatus(srTweet);

Number 5 : no definition for CreateFavorite

var vrResult = twitterContext.CreateFavorite(srRetweetId);

And i can not find any example for V3

It always say
but how do you get
in the first place ?

Answer Source

LINQ to Twitter v3.0 is async, which means that naming conventions have changed as well as the way to call some code. Some changes were for consistency or improving cross-platform operation. It's also a Portable Class Library (PCL), which allows it to run on multiple platforms. Here's a quick rundown on some of your questions:

  1. Try this:

        var auth = new SingleUserAuthorizer
            CredentialStore = new SingleUserInMemoryCredentialStore
                ConsumerKey = ConfigurationManager.AppSettings["consumerKey"],
                ConsumerSecret = ConfigurationManager.AppSettings["consumerSecret"],
                AccessToken = ConfigurationManager.AppSettings["accessToken"],
                AccessTokenSecret = ConfigurationManager.AppSettings["accessTokenSecret"]
  2. The previous implementation of GetFileBytes has cross-platform issues, so I removed it. You'll have to write your own code to read the bytes of the file. Here's the old implementation:

    /// <summary>
    /// Reads a file into a byte array
    /// </summary>
    /// <param name="filePath">Full path of file to read.</param>
    /// <returns>Byte array with file contents.</returns>
    public static byte[] GetFileBytes(string filePath)
        byte[] fileBytes = null;
        using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        using (var memStr = new MemoryStream())
            byte[] buffer = new byte[4096];
            memStr.Position = 0;
            int bytesRead = 0;
            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                memStr.Write(buffer, 0, bytesRead);
            memStr.Position = 0;
            fileBytes = memStr.GetBuffer();
        return fileBytes;
  3. Here's one of the TweetWithMediaAsync overloads:

        Status tweet = await twitterCtx.TweetWithMediaAsync(
            status, PossiblySensitive, Latitude, Longitude,
            PlaceID, DisplayCoordinates, imageBytes);
  4. That is now called TweetAsync:

            var tweet = await twitterCtx.TweetAsync(status);
  5. Here's an example of CreateFavoriteAsync:

        var status = await twitterCtx.CreateFavoriteAsync(401033367283453953ul);
  6. You have to instantiate TwitterContext - here's an example:

        var twitterCtx = new TwitterContext(auth);

For more information, you can download the source code and see working examples for multiple technologies. The sample project names have the Linq2TwitterDemos_ prefix:

Every API call is documented, as well as documentation on other aspects of LINQ to Twitter: