# libannict
[Annict](https://annict.com/) の Web API のクライアントライブラリ
本ライブラリの利用に必要な Rust の最低バージョン (MSRV): `1.75.0`
コントリビューションを歓迎しております!プルリクエストを送る場合、先に [issue](https://codeberg.org/naskya/libannict/issues) を立てるようにお願いいたします🙏
## 使用例
```rust
use libannict::Annict;
// クライアントを作成
let client = Annict::new("access_token")?;
```
### 作品を検索する
```rust
// 作品を検索
let works = client
.works()
.filter_title("ゼロの使い魔".to_owned())
.search(10)
.await?;
// 作品の情報を利用
for work in works {
println!("{}", work.title);
}
```
### エピソードを検索する
```rust
// エピソードを検索
let episodes = client
.episodes()
.filter_work_id(6077)
.search(20)
.await?;
// エピソードの情報を利用
for episode in episodes {
println!("{:?}", episode.title);
}
```
### 自分が視聴状況をつけた作品を検索する
```rust
use libannict::{work::SortBy, Order};
// 作品を検索
let works = client
.me()
.works()
.sort(SortBy::Season, Order::Desc)
.search(10)
.await?;
// 作品の情報を利用
for work in works {
println!("{}", work.title);
}
```
### 特定のユーザーの活動を検索する
```rust
use libannict::{Activity, ChangeStatus, Status};
// 活動を検索
let activities = client
.user("naskya".to_owned())
.activities()
.search(10)
.await?;
// 活動の情報を利用
for activity in activities {
if let Activity::ChangeStatus(activity) = activity {
let ChangeStatus { status, work, .. } = activity;
match status {
Status::Watched => println!("「{}」を観ました", work.title),
_ => (),
}
}
}
```
### 作品の視聴状況を変更する
```rust
use libannict::Status;
// ID が 860 の作品の視聴状況を「見た」に変更
let _ = client
.write_access()
.change_status(860, Status::Watched)
.await?;
```
### GraphQL API によって返される `ID` を直接利用する
```rust
use libannict::{AnnictObject, InternalId, Work};
// アニメ「AIR」の GraphQL API における ID
let id = InternalId("V29yay0yNDE=".to_owned());
// 作品の情報を取得
let work = Work::from_internal_id(&client, id).await?;
assert_eq!(work.title, "AIR");
```
## ライセンス
[graphql/schema.graphql](./graphql/schema.graphql) を除く、本リポジトリの内容には
- MIT License ([LICENSE-MIT](./LICENSE-MIT) or https://opensource.org/licenses/MIT)
- Apache License, Version 2.0 ([LICENSE-APACHE](./LICENSE-APACHE) or https://www.apache.org/licenses/LICENSE-2.0)
の 2 つのライセンスが適用されます。あなたの選択でどちらのライセンスの下でも利用できます。
詳しくは [COPYING](./COPYING) を参照してください。
### プロジェクトへの貢献
明示的に宣言されない限り、本プロジェクトへのあなたの貢献は上記の通りにデュアルライセンスされます。