3 个版本 (破坏性更新)

0.3.0 2019年6月17日
0.2.0 2019年6月16日
0.1.0 2019年6月10日

#deserialize-json 中排名第 34

MIT 许可证

28KB
454

ci-badge docs-badge crates.io version

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