6

好吧,我最近升级到 V3,但它破坏了很多东西

我该如何解决这些问题?

1号 :

这不再起作用,没有像 Credentials 和 InMemoryCredentials 这样的定义

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

数字 2:不再定义 GetFileBytes

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

数字 3:没有定义 TweetWithMedia

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

数字 4:没有 UpdateStatus 的定义

var tweet = twitterContext.UpdateStatus(srTweet);

数字 5:没有 CreateFavorite 的定义

var vrResult = twitterContext.CreateFavorite(srRetweetId);

而且我找不到 V3 的任何示例

它总是说twitterCtx,但你如何获得twitterCtx第一?

4

1 回答 1

9

LINQ to Twitter v3.0 是异步的,这意味着命名约定以及调用某些代码的方式已经改变。一些更改是为了保持一致性或改进跨平台操作。它也是一个可移植类库 (PCL),允许它在多个平台上运行。以下是您的一些问题的简要说明:

  1. 试试这个:

        var auth = new SingleUserAuthorizer
        {
            CredentialStore = new SingleUserInMemoryCredentialStore
            {
                ConsumerKey = ConfigurationManager.AppSettings["consumerKey"],
                ConsumerSecret = ConfigurationManager.AppSettings["consumerSecret"],
                AccessToken = ConfigurationManager.AppSettings["accessToken"],
                AccessTokenSecret = ConfigurationManager.AppSettings["accessTokenSecret"]
            }
        };
    
  2. GetFileBytes 之前的实现有跨平台的问题,所以我去掉了。您必须编写自己的代码来读取文件的字节。这是旧的实现:

    /// <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. 这是 TweetWithMediaAsync 重载之一:

        Status tweet = await twitterCtx.TweetWithMediaAsync(
            status, PossiblySensitive, Latitude, Longitude,
            PlaceID, DisplayCoordinates, imageBytes);
    
  4. 现在称为 TweetAsync:

            var tweet = await twitterCtx.TweetAsync(status);
    
  5. 下面是 CreateFavoriteAsync 的示例:

        var status = await twitterCtx.CreateFavoriteAsync(401033367283453953ul);
    
  6. 您必须实例化 TwitterContext - 这是一个示例:

        var twitterCtx = new TwitterContext(auth);
    

有关更多信息,您可以下载源代码并查看多种技术的工作示例。示例项目名称具有 Linq2TwitterDemos_ 前缀:

https://linqtotwitter.codeplex.com/SourceControl/latest#ReadMe.txt

每个 API 调用都记录在案,以及 LINQ to Twitter 其他方面的文档:

https://linqtotwitter.codeplex.com/documentation

于 2014-03-21T18:34:47.147 回答