3 个版本 (破坏性更新)
0.3.0 | 2019年6月17日 |
---|---|
0.2.0 | 2019年6月16日 |
0.1.0 | 2019年6月10日 |
在 #deserialize-json 中排名第 34
28KB
454 行
tweet
此库用于解析 Twitter API 的数据。
我创建这个库是因为在使用 twitter-stream
时无法解析数据,而 twitter-stream-message
是一个已废弃的项目,目前无法使用。
如果缺少任何内容,请随意创建问题。我尝试添加了每个字段,无论潜在用途如何,但有些字段我忽略了;主要是没有具体文档或无法访问的内容,如 PowerTrack 和企业端点响应。
简单示例
use std::str::FromStr;
use tweet::Tweet;
Tweet::from_str(&json)
与 twitter-stream 一起使用
use twitter_stream::{Token, TwitterStreamBuilder};
use twitter_stream::rt::{self, Future, Stream};
use tweet::TwitterResponse;
// Import your keys however you want
let token = Token::new(
dotenv!("TW_API"), dotenv!("TW_SEC"),
dotenv!("TW_ACC_KEY"), dotenv!("TW_ACC_SEC"));
let future = TwitterStreamBuilder::filter(token)
.timeout(None)
.track(Some("cat, dog, rabbit"))
.listen().unwrap()
.flatten_stream()
.for_each(move |json| {
// A twitter stream just sends us raw JSON responses, and those
// responses can contain a Tweet or a Limit payload. TwitterResponse
// encapsulates deserializing this variable payload. Without it there
// is a possibility of trying to deserialize a Limit as a Tweet and
// getting a deserialization error.
let tweet = match TwitterResponse::from_str(&json) {
// Return the tweet so we can use it
Ok(TwitterResponse::Tweet(tweet)) => tweet,
// Just print out limit information if we get it and return
Ok(TwitterResponse::Limit(limit)) => {
println!("Got a limit: {:#?}", limit);
return Ok(());
}
// If something goes wrong, print the error and the payload
Err(why) => {
println!("Error: {:?}\nPayload: {}", why, json);
return Ok(());
}
};
// Use tweet however you want
println!("Tweet URL: {}", tweet.url());
Ok(())
})
.map_err(|e| println!("Error: {}", e));
依赖项
~1.7–2.9MB
~55K SLoC