1 个不稳定版本
0.0.1 | 2024年4月17日 |
---|
#92 在 #twitter
32 每月下载次数
用于 tweet-archive-to-markdown
475KB
1.5K SLoC
Twitter存档
为Twitter存档数据定义的Serde结构体、反序列化和序列化
要求
此存储库需要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
提供,无论源选择是否混合camelCase
和snake_case
格式。
运行测试
可以通过以下方式运行个别数据结构文档测试;
RUST_BACKTRACE=1 cargo test --doc 'structs::personalization::InferredAgeInfo'
运行示例
可以通过类似于以下cargo
咒语运行示例;
cargo run --example search-tweets -- --help
注意;使用
--
分隔符将参数传递给示例,而不是Cargo子命令
贡献
为twitter-archive和rust-utilities贡献的选项
分支
⚠️ 基于此存储库创建分支、提交贡献、发布衍生作品等将形成协议,受用例基础许可子部分的约束。
例如,如果您选择贡献或使用此项目,您承认并接受这些基于使用的许可条款也将适用于此类作品。
开始将此仓库的分支(Fork)创建到一个你有写权限的账户上。
- 添加远程分支的URL。URL语法是
[email protected]:<NAME>/<REPO>.git
...
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 仓库中的详细贡献指南。
赞助
感谢您考虑这一点!
无论您是否能够为rust-utilities维护的如twitter-archive这样的项目提供财务支持,请考虑与他人分享有用的项目,因为维护开源仓库的一个目标是为社区提供价值。
署名
- GitHub --
github-utilities/make-readme
- GitHub --
rust-utilities/tweet-archive-to-markdown
- Stack Overflow -- 如何在具有可变键名的JSON对象上使用serdy JSON
许可证
本项目基于使用场景进行许可
商业和/或专有用途
如果项目是 商业的 或者 (||
) 专有,请联系作者以获取定价和许可选项,以使用此仓库中的代码和/或功能。
非商业和开源用途
如果项目是 非商业的 并且 (&&
) 以与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