#twitter #serde #json

twitter-archive

为Twitter存档数据定义的Serde结构体、反序列化和序列化

1 个不稳定版本

0.0.1 2024年4月17日

#92#twitter

32 每月下载次数
用于 tweet-archive-to-markdown

AGPL-3.0

475KB
1.5K SLoC

Twitter存档

为Twitter存档数据定义的Serde结构体、反序列化和序列化

Byte size of Twitter Archive Open Issues Open Pull Requests Latest commits GitHub Actions Build Status License



要求

此存储库需要Rust语言/编译器从源代码构建,具体请参阅Rust

截至上次更新此ReadMe文件,推荐使用安装脚本安装Rust...

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

快速入门

此存储库是Rust库,在项目Cargo.toml文件中将它定义为依赖项...

cargo add twitter-archive

Cargo.toml (省略)

[dependencies]
twitter_archive = "0.0.1"

有关定义依赖项的详细信息,请参阅Rust -- 文档 -- 定义依赖项

然后在源文件中通过use语句包含...

use twitter_archive;

使用

Twitter存档解析示例,打印所有推文的创建日期和全文;

use zip::read::ZipArchive;
use std::{fs, path};
use twitter_archive::structs::tweets;

fn main() {
    let input_file = "path/to/twitter.zip";

    let file_descriptor = fs::File::open(input_file).expect("Unable to read --input-file");
    let mut zip_archive = ZipArchive::new(file_descriptor).unwrap();
    let mut zip_file = zip_archive.by_name("data/tweets.js").unwrap();

    let mut buff = String::new();
    zip_file.read_to_string(&mut buff).unwrap();
    let json = buff.replacen("window.YTD.tweets.part0 = ", "", 1);

    let data: Vec<tweets::TweetObject> = serde_json::from_str(&json).expect("Unable to parse");

    for (index, object) in data.iter().enumerate() {
        /* Do stuff with each Tweet */
        println!("Index: {index}");
        println!("Created at: {}", object.tweet.created_at);
        println!("vvv Content\n{}\n^^^ Content", object.tweet.full_text);
    }
}

有关更多示例,请参阅examples/目录!


备注

此存储库是功能完整或完全功能性的,添加功能或修复错误的拉取请求当然受欢迎。


面向应用程序作者的提示

data/manifest.js文件,可通过src/structs/manifest.rs解析,定义指向存档目录/文件结构中其他文件和字符串的指针,这可能有助于预先解析/剥离其他文件。

所有由JSON/JavaScript Twitter存档数据定义的访问器/键名均通过Rust数据结构中的snake_case提供,无论源选择是否混合camelCasesnake_case格式。


运行测试

可以通过以下方式运行个别数据结构文档测试;

RUST_BACKTRACE=1 cargo test --doc 'structs::personalization::InferredAgeInfo'

运行示例

可以通过类似于以下cargo咒语运行示例;

cargo run --example search-tweets -- --help

注意;使用--分隔符将参数传递给示例,而不是Cargo子命令


贡献

为twitter-archive和rust-utilities贡献的选项


分支

⚠️ 基于此存储库创建分支、提交贡献、发布衍生作品等将形成协议,受用例基础许可子部分的约束。

例如,如果您选择贡献或使用此项目,您承认并接受这些基于使用的许可条款也将适用于此类作品。

开始将此仓库的分支(Fork)创建到一个你有写权限的账户上。

cd ~/git/hub/rust-utilities/twitter-archive

git remote add fork git@github.com:<NAME>/twitter-archive.git
  • 提交你的更改并推送到你的分支,例如修复一个问题...
cd ~/git/hub/rust-utilities/twitter-archive


git commit -F- <<'EOF'
:bug: Fixes #42 Issue


**Edits**


- `<SCRIPT-NAME>` script, fixes some bug reported in issue
EOF


git push fork main

注意,可以使用 -u 选项将 fork 设置为默认远程,例如 git push -u fork main,但是这也会默认将 fork 远程用于拉取!这意味着从 origin 拉取更新必须明确执行,例如 git pull origin main

  • 然后在GitHub上通过Web UI提交Pull Request,URL语法是 https://github.com/<NAME>/<REPO>/pull/new/<BRANCH>

注意;为了减少你的Pull Request在被接受之前需要修改的可能性,请查阅 dot-github 仓库中的详细贡献指南。


赞助

感谢您考虑这一点!

通过Liberapay,您可以 sponsor__shields_io__liberapay 定期赞助。

无论您是否能够为rust-utilities维护的如twitter-archive这样的项目提供财务支持,请考虑与他人分享有用的项目,因为维护开源仓库的一个目标是为社区提供价值。


署名


许可证

本项目基于使用场景进行许可


商业和/或专有用途

如果项目是 商业的 或者 (||) 专有,请联系作者以获取定价和许可选项,以使用此仓库中的代码和/或功能。


非商业和开源用途

如果项目是 非商业的 并且 (&&) 以与AGPL-3.0兼容的许可证发布,则它可以在以下条款下使用此仓库中的代码。

Serde structs, deserialize, and serialize definitions for Twitter archived data
Copyright (C) 2024 S0AndS0

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, version 3 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

... 有关更详细的信息,请查阅 AGPL-3.0 许可证的完整版本。

依赖项

~1.7–2.8MB
~53K SLoC