libannict 0.0.17

Annict API のクライアントライブラリ
Documentation
# libannict

[Annict](https://annict.com/) の Web API のクライアントライブラリ

本ライブラリの利用に必要な Rust の最低バージョン (MSRV): `1.75.0`

## 注意事項

まだ制作初期段階なので、不足している機能や API の破壊的変更が多くあります。

### 機能の実装状況

- 読み取り
  - [x] 作品の検索
  - [x] エピソードの検索
  - [x] キャラクターの検索
  - [x] 人物の検索
  - [x] 団体の検索
  - [x] 利用者情報の取得
  - [x] 特定の利用者が視聴状況を記録した作品の検索
  - [ ] 特定の利用者が特定の視聴状況を記録した作品の検索
  - [x] 特定の利用者の活動の検索
  - [ ] 特定の利用者のエピソード視聴記録の検索
  - [x] 作品群(シリーズ)に含まれる作品の検索
  - [x] 特定の作品が含まれる作品群の検索([Annict のバグ]https://github.com/annict/annict/issues/4136により現在使えません)
- 書き込み
  - [x] 作品の視聴状況の変更
  - [x] 作品の感想の作成
  - [ ] 作品の感想の編集
  - [ ] 作品の感想の削除
  - [x] エピソードの視聴記録の作成
  - [ ] エピソードの視聴記録の編集
  - [ ] エピソードの視聴記録の削除

### リポジトリへの貢献について

コントリビューションを歓迎しております!プルリクエストを送る場合、先に [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) を参照してください。

### プロジェクトへの貢献

明示的に宣言されない限り、本プロジェクトへのあなたの貢献は上記の通りにデュアルライセンスされます。