FinOps有望降低企业50%+的云成本! 了解详情
写点什么

采访 Tweetinvi 的作者 Thomas Imart

  • 2014-09-11
  • 本文字数:4006 字

    阅读完需:约 13 分钟

无论是超大型的跨国公司,还是小型专卖店,Twitter 都已经成为了大多数公司交流平台策略中必不可少的一环。除了使用 Twitter 直接发送各种消息的核心功能之外,能够分析 Twitter 趋势的能力也是至关重要的,但这一项任务往往并不那么简单。

随着时间的推移,大量的陈旧 Twitter API 被标注为过期,或者索性被完全删除了。新的 API 取代了这些老家伙的位置,但往往也意味着完全不同的使用方式。我们将和 Tweetinvi 的作者 Thomas Imart 进行一次交流,看看他的软件将对使用者带来怎样的帮助。

InfoQ**:市面上已经有许多 Twitter的客户端存在,那么 Tweetinvi的特色又是什么呢?**

Thomas: Tweetinvi 的诞生起源于 2012 年,当时我正在从事一项社交媒体研究的项目,其中一项任务是从来自于 Twitter 流 API 中的一个随机的推文集合进行分析。刚开始时,我试图寻找一些第三方的 C#类库来帮助我完成这一任务,但并没有从中找到能够满足我的研究所需的类库。因此,我最终决定开发一套自己的类库,以实现获取推文的目的。

易用性与生产效率

从 2012 年到现在,Tweetinvi 已经产生了很大的变化,但始终秉持它最初的使命:即简化开发者的工作。Tweetinvi 的最新版本是 0.9,我相信这个版本能够为开发者提供足够高效的生产力,而且比其它任何 API 都要高。作为主要开发者,我的信念是尽最大可能帮助 API 的使用者。我也协助参与了各种研究项目的开发,同时,我也尽量保证能够及时回复论坛上的任何问题。

文档页面中,你能够找到许多示例,以下是其中的几个示例:

复制代码
// Publish simple tweet
var tweet = Tweet.PublishTweet("Hello World!");
// Get my Friends
var user = User.GetLoggedUser();
var friends = user.GetFriends();
// Search the tweets containing tweetinvi
var tweets = Search.SearchTweets("tweetinvi");

正如我所说,Tweetinvi 的创建目的是从 Twitter 流 API 中获取信息。以下代码描述了如何使用 Tweetinvi 查找所有包含了“Tweetinvi”关键字的推文。

复制代码
// Get all tweets containing tweetinvi
var filteredStream = Stream.CreateFilteredStream();
filteredStream.AddTrack"tweetinvi");
filteredStream.MatchingTweetReceived += (s, args) =>
{ Console.WriteLine(args.Tweet.Text); };filteredStream.StartStreamMatchingAllConditions();

灵活性

Tweetinvi 是一套为了开发者而开发的 API。每个版本的 Tweetinvi 都包含一个初始的变更记录,我很乐于为了实现开发者的请求而作出改变。因此,如果你需要的特性还没有实现,请在论坛上留言。

可扩展性

Tweetinvi 的强大之处体现在它能够让开发者自行编写查询。最近,有一名用户问我是否能够获取从某个 UserTimeline 的某条特定推文 Id 开始的全部状态。Tweetinvi 实现了大部分开发者所需的各种特性,不过这一特性是预计在今后的某个版本中才会实现的。因此,我用了不到一分钟的时间为他编写了这样一个解决方案:

复制代码
var since_id = 410493427596288001;
var query = String.Format("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name={0}&
since_id={1}&count=3200", "USER_SCREEN_NAME", since_id);
var tweetsDTO = TwitterAccessor.ExecuteGETQuery<IEnumerable<ITweetDTO>>(query);
var tweets = Tweet.GenerateTweetsFromDTO(tweetsDTO);

Tweetinvi 还包括了其它各种实用特性,不过我打算让你通过阅读文档或者查看源代码的方式,自行探索这些特性。

InfoQ**:Twitter在过去一年中不断加强了在访问限制(Rate Limit)方面的控制。Tweetinvi**是通过怎样的方式来解决这一问题的呢?

Thomas:Twitter 的访问限制对于那些拥有超大量用户的应用程序来说影响是最大的,而对于多数开发者来说,只要他们遵照 Twitter API 团队的规定进行请求,很少会受到访问限制方面的影响。

Tweetinvi 与访问限制

Tweetinvi 能够查询到每个帐号的访问限制相关信息,例如查看剩余的请求操作数量,以及离下一次访问限制清空还有多久。

复制代码
RateLimit.GetCurrentCredentialsRateLimits().StatusesHomeTimelineLimit;

提示

选择正确的令牌类型

你可以选择使用一个应用程序令牌或者是用户令牌对 Twitter 的终结点进行请求。开发者在大多数情况下应该选择使用用户令牌,因为这种情况下,访问限制只作用于该开发者的特定帐号,而不会影响到应用程序的访问限制。有多种方式可以从 Twitter 那里获取一个令牌,Tweetinvi 提供了两种不同方式的令牌生成器。

慎重地选择你的方法

考虑到访问限制的存在,正确地选择 Twitter API 的终结点,并且根据你所需的对象数目进行决定就变得非常重要了。有些时候你必需作出适当的决定,是要获取包含整个对象的列表,还是简单地返回这些对象的 id。

比方如,同样是在访问限制的 15 分钟时间内,你可以返回 90 万个用户 id 数据,也可以选择返回 1 万 8 千个完整的用户对象列表。

使用流 API!

我在所参与过的项目中经常会遇到某些开发者,他们不会考虑使用 Twitter 的流 API。有些项目在实现中会通过使用多个帐号的方式应对 Twitter 所强制的访问限制措施,这种方式是错误的!

如果你打算获取你的帐号所发的所有推文,你可以选择使用一个计时器,每隔 30 秒调用一次 Timeline.GetHomeTimeline(),也可以选择使用 UserStream(用户流)。

用户流的使用可以不受访问限制的控制,它还允许你实时访问你的帐号的任何更新信息。因此,如果我需要获取某个特定用户时间线上的全部推文,可以通过以下代码实现:

复制代码
var userStream = Stream.CreateUserStream);
userStream.TweetCreatedByAnyone += (s, args) => { Console.WriteLine(
args.Tweet.Text); };
userStream.StartStream();

InfoQ**:最近,曾一度非常流行的应用 MetroTwit因为令牌限制的原因而关闭了。你对于 Twitter的令牌限制,或者说对于令牌限制这种常见的手段是否有一些自己的想法呢?**

Thomas:对于 Twitter 作出的 API 访问限制的决定,我的感觉不是很好。对于大型的应用程序来说,在这种限制下是不太可能继续使用 API 的。

从另一方面来说,这些限制实际上也只对百万级用户数量的应用才会产生影响。

我必须承认,对于大多数应用程序来说,Twitter 的访问限制是经过精确计算的。我个人曾经从事于多个与 twitter 相关的项目,只有在某个需要对大量的推文和用户进行分析的研究型项目中,我才遇到过因访问限制而产生的问题。

如果你遵循了之前的问题中所提供的所有提示,那么碰到访问限制问题的风险是非常小的。

我非常乐于帮助任何开发者解决他们所遇到的访问限制问题,你可以在任何时候在 Tweetinvi 的论坛上发贴求助。

InfoQ**:对于使用 Twitter的 API,你还有哪些提示吗?**

Thomas:我对开发者的第一个建议,就是仔细阅读 Twitter 的文档。文档中有大量的信息描述了 Twitter API 的行为,以及对于某个终结点的请求会返回怎样的结果。我这样建议的原因在于,对于开发者来说, Twitter API 所返回的信息有时并不是我们所期望的。但有些时候,某些行为即使在文档中也没有完整的描述,你不得不对你的查询所返回的 json 结果进行验证,以了解该 API 的行为。

举例来说,每个查询返回的推文数目都不会超过其 count 参数所指定的数量,但是唯独 SearchTweets 方法会忽略 count 参数,你所获得的结果数目可能会小于预期,即使还有未返回的结果存在。

像这种情况还有好几处存在,因此结论就是对于返回数据要多个心眼,此外还要记得将 Twitter 文档的链接加入你的书签中!

InfoQ**:随着 API的演变,你是否观察到 Twitter在将来会产生怎样的改变,你又希望看到怎样的变化呢?**

Thomas:Twitter 是一个非常有趣的研究课题。它本身是一个从不同用户那里获取意见与反馈的优秀平台。我个人希望看到一些新的特性出现,能够提供更复杂的查询以分析用户的推文,同时也希望查询的访问限制数量能够提高一些。

我认为 Twitter 会尝试去获取更多有关于用户与趋势的信息,Twitter 大概会选择将这种信息进行销售出去,但我也希望看到 Twitter 能通过 API 让我们访问到这些信息。

API 的文档做的非常出色,但有时会有一些过期内容没有更新,有一些部分缺失了一些细节。我希望文档能做到 100% 的准确性,这样也能够让 Tweetinvi 更好地为开发者们提供信息。

此外,在 Twitter 的 API 结果中存在一些不合情理的地方,例如某一条推文明明已经经过了 42 次转发,但是它的 Retweeted 字段仍然显示为 false。类似的例子还有许多,我希望 Twitter 能够修复这些问题,使我们能够为开发者们提供更准确的信息。在 Tweetinvi 的实现中,我决定将这些来自 Twitter 的结果原封不动地提供给开发者,希望这些来自 API 的错误信息在今后的更新后能够被修复。

InfoQ:接下来有什么计划吗?

Thomas:我打算让 Tweetinvi 出现在更多的平台上,因此我目前正在开发支持可移植类库(Portable Class Library – PCL)的 Twitter API 的第一个版本,它是完全基于.NET 可移植类库的子集进行开发的。这意味着你将能够在针对 Windows、Windows 8、Windows Phone 和 Mono 开发的项目中使用 Tweetinvi 类库。

关于受访者

Thomas Imart是一位软件开发者,从他获得第一个计算机科学专业的学位以来,他就专注于.NET 平台上的开发。在毕业那年,他与他的团队一起开发了一个触摸式桌面的原型。在结束了在微软的工作之后,他搬到了纽约,并在那里获得了信息系统的学位。从那时起,他便热衷于应用程序与系统的设计。在史蒂文斯理工学院的研究团队中,他开发了多种工具,以便于对用户在社交网站上的互动行为进行分析。为了更好地对每个月产生的几亿推文进行收集、存储与分析,他打造出了著名的 Tweetinvi 类库。该类库如今已在.NET 世界中得到了广泛的应用,Thomas(也被称做“Linvi”)也在论坛中为开发相关应用提供各种帮助与建议。Thomas 如今居住在伦敦,使用 SQL、WPF、Knockout、MVC、WebApi 等各种技术参与多个不同项目的开发。

查看英文原文: Interview with Thomas Imart, Creator of Tweetinvi

2014-09-11 13:391624
用户头像

发布了 428 篇内容, 共 167.0 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

SpreadJS 纯前端表格控件应用案例:集成 Odoo提升企业ERP表格功能

葡萄城技术团队

开源 SpreadJS Odoo

写代码爬取了某 Hub 资源,只为撸这个鉴黄平台!

程序员生活志

教程 Hub 资源

9大训练营免费开营!阿里云大数据团队的独门绝学全在这了

Apache Flink

大数据 训练营

法定数字人民币将成中国金融新名片

CECBC

数字货币 人民币

微服务-技术专题-设计原则AFK

洛神灬殇

进击谷歌:多线程下程序顺序怎么稳定不乱?

架构师修行之路

数据结构与算法

Python3 for ... else ...陷阱

王坤祥

Python Python PEP

大厂面试必读,JAVA进阶神书《深入理解Java虚拟机》第三版更新内容全曝光!

华章IT

JVM 虚拟机 周志明 Java虚拟机 jvm调优

浅谈技术管理之团队管理

大黄蜂

团队管理 技术管理

大数据技术发展(二):Hadoop 技术生态圈的发展

cristal

Java 大数据 hadoop hadoop3

《精益创业》摘要

孙苏勇

书摘 精益创业

一文吃透PHP进程信号处理

书旅

php Linux 信号

Flink所需组件-1

小知识点

scala 大数据 flink 流计算

为什么一旦自己创业了,很难再回到公司去坐班?

北柯

创业 互联网 创业心态 上班 上班族

搭载十代酷睿i7处理器,这台ROG冰刃4新锐拥有媲美台式游戏电脑的性能

最新动态

Pulsar 联合 TiDB 推出大数据场景数据应用分析解决方案

Apache Pulsar

大数据 InfoQ Apache Pulsar #TiDB

Week11

一叶知秋

吃透Laravel的Ioc容器

书旅

laravel 容器 ioc

云原生架构的基石

soolaugust

Docker 架构 Kubernetes 容器 云原生

核查框架新的选择

柿子

jsr-303 核查框架 butterfly

四种主要的 IO 模型

一盐难进

Netty

2w字 + 40张图带你参透并发编程!

cxuan

Java 后端 并发

ST在keil下开发时候文件options配置的一些小技巧

良知犹存

嵌入式

跟我一起基于Karma搭建一个测试环境(下)

Jack Q

大前端 测试框架 Karma

有一种自我欺骗,叫只为孩子

zhoo299

随笔杂谈 家庭

LeetCode题解:66. 加一,新数组求和再翻转,JavaScript,详细注释

Lee Chen

大前端 LeetCode

56张图入门操作系统——内功心法,适合所有程序员

执鸢者

大前端 操作系统

“庆俞年”大战,真正受损的不是李国庆

北柯

创业 合伙人 创业者 互联网人 当当网

系统不可用总结

不在调上

为什么 Bash 脚本总是不稳定?

柴锋

bash Linux DevOps 运维 Shell

浅谈如何做好软件研发团队的盘点

大黄蜂

团队管理 技术管理

  • 需要帮助,请添加网站小助手,进入 InfoQ 技术交流群
采访Tweetinvi的作者Thomas Imart_.NET_Jonathan Allen_InfoQ精选文章