![見出し画像](https://assets.st-note.com/production/uploads/images/108115122/rectangle_large_type_2_4c04c53b73300a0b6823987278a78b6b.png?width=1200)
ANNICT APIを活用して自身の「歴代アニメ視聴履歴&評価ポータル」を作成
概要
掲題の通り、個人的に以前からやりたかった「歴代アニメ視聴作品を自分の評価別に並べたい」を実現してみた。
その過程と成果物をシェアしたく記事にします。
![](https://assets.st-note.com/img/1686633668133-0uiBRaL7pQ.png?width=1200)
ANNICTって?
普段アニメ大量に観てる人とかレビュー書いてる人なら使ったことある人多いんじゃないかと思いますが、個人で運営されているアニメ視聴管理WEBサービスです。
個人運営とは思えないくらい高クオリティで運営維持されており、アニメ視聴がルーティーンな人は使うべきサービスだし、普段そんなにアニメ観ない人でも「あーこんなアニメ観たっけな」みたいな感じで振り返るのにも便利なので一度触ってみてください。
なんでポータル作ったの?
前述したとおりANNICTが非常に優れたサービスなので視聴した作品を管理するだけだったらそちらで事足りるのですが、個人的に「そのアニメを見て感じた評価」を残しておきたい&評価別にソートしたりしたい、というのがあって今回作成に至りました。
アニクトの既存UI上だと、評価を残しておけはするんですが微妙に自分が指標としている項目と違ったり定量的に表現できなかったりするので「視聴管理としてのANNICT」から基礎データを引っ張ってくることでそこに評価を紐づけて表現できないか、と考えました。
以下に、制作過程とアウトプットおよびその使い方について記述します。
制作過程
更新履歴
2023/07/13 自動化に成功したのでその過程を追記しました。
ANNICT APIからのデータ取得
ありがたいことにANNICTはAPIを公開してくれているのでここからデータを取得することにしました。自分の勉強もかねて。
自分は非エンジニアのド文系だったのでここに一番苦戦しました..。仕事でSQLは使っていたのでDBからのデータ抽出の経験はあったのですが、APIを触ったことは誰かが書いてくれたGASを回して郵便番号から住所を引っ張ってくる、みたいなことしか経験がなくAPIの構造理解から開始。
とりあえずPythonで実現できないかと思いYouTube等で無料のレクチャーを漁って試してみましたがrequestを投げるところまでは上手くいったのですがパラメーターの指定やページングが難解で大苦戦…。
結果、奨励されているgraphQLを使った実現方式に切り替えました。
SQLは触ったことがあったのでquery言語としてはかなり理解しやすく、感覚的にある程度記述できるのが助かりました..。ただ、参考にできる記事や動画が非常に少なかったので本当に一からやる時は学習ハードルが結構あるなー、という所感です。特に枝葉の部分は調べてもHITせずが多かったので実現できるのか出来ないのかの判断が難しかったです。いまだにわからない部分多数。
今回は作品に紐づく基礎データを抽出したいので以下のようなqueryでAPIを叩きました。
query Test2 {
viewer{
works(
#state: WATCHED,
orderBy: { field: CREATED_AT, direction: ASC },
#seasons: ["2022-spring"]
)
{edges
{node
{
annictId
viewerStatusState
title
titleEn
officialSiteUrl
twitterHashtag
seasonYear
seasonName
media
satisfactionRate
episodesCount
watchersCount
seriesList{edges{node{SeriesName: name}}}
staffs(orderBy: { field: SORT_NUMBER direction: DESC},
first: 2){edges{node{roleText
Companyname: name}}}
casts(orderBy: { field: SORT_NUMBER direction: ASC},first: 1){edges{node{character{meincharaname: name}
person{mainCharaCast: name}}}}
}
}
}
}
}
取得したデータをCSVに変換…をやめて自動で更新されるようにしました(7/13アップデート)
上記のアウトプットはjson形式で行われます。自分が評価をつける作業はスプシで行っているため、スプシに取り込める形式(CSVなど)に変換してあげる必要があります。
多分、コード書いてCSVで直接エクスポートもできるんでしょうけどWEBサービスに頼りました。
jsonの結果貼り付ければものの数秒でcsvファイルに変換してくれるのでめちゃくちゃ楽です。
(2023/7/13追記)
取り消し線でやっていた方法もまぁ5分あれば終わるんですが、GAS(Google Apps Script)を使ってAPIからの結果取得およびスプレッドシートへの更新を自動化できました。
詳細については記述しませんが、考え方としては
・GASを使ってAPIから作品取得を取得
↓
・取得した結果(json形式)を配列に変換してスプレッドシートにエクスポート
↓
GASのトリガー機能で日時で上記処理を行われるように設定
というスクリプトを(chatGPTに添削してもらいながら)書きました。chatGPT半端ないって。
結果、ほぼベースの部分を自分で更新することはなくなり以下の評価の入力作業を期末にすればいいだけになりました。めちゃくちゃ楽。
スプシで評価付け
ここは細かい作業内容は自分の独自のものになるので割愛しますが、ざっくり以下のような感じです。基本はANNICT IDをKEYとして最後にVLOOKUPでシートAに情報連携してあげるイメージです。
0:シートA(Looker連携用のマスタシート)、シートB(評価付け作業用シート)、シートC(ローデータインポート先シート)
1:シートCにCSVファイルインポート(※クールが終わるたびにここにインポートを繰り返す)
2:シートBに基礎情報を引っ張ってきて評価を入力
3:シートAにB,Cから必要な情報を連携
どんな作業をしているかは閲覧限定で元スプシを公開しますのでよければ見てください。
Looker Studioでビジュアライズして完成
スプシで直接見ればいいかもしれないですが、自分はLookerStudioが個人的に好きなのでせっかくなので…。スプシ自体をいじっちゃうと結構エラー起きたりごちゃついたりしてあまり好きじゃないんですよね…。
![](https://assets.st-note.com/img/1686635689787-4vPmL1LW40.png?width=1200)
アウトプット:歴代アニメ視聴履歴&評価サマリ
そんなわけで完成したのがこちらです。
ご存知の通り毎週noteで週間アニメランキングを発表しているのでその結果とかもろもろを以下に記述する評価基準にあてはめてこのポータル上で観れるようにしていきます。
評価基準について
・5項目の8段階評価(0~7点)の35点満点。
・なぜ7段階かというと以前まで使っていたランキングアプリの仕様。結果結構納得のいく基準なのでそのまま採用。
・シナリオ重視派なのでシナリオに厚めに配点振っています。
<ポイント基準>
0:非常に良くない、1:良くない、2:あまり良くない、3:平均的、4:平均以上、5:良い、6:凄く良い、7:最高水準
シナリオ(単話単位):週間アニメランキングでも発表している各話単位の点数の平均値で採点。平均点が9.2以上で7、8.7以上で6、8.4以上で5、8.0以上で4、7.5以上で3、7.0以上で2、6.0以上で1、6.0未満で0。
シナリオ(全体感):全体通してのシナリオの筋の通り方、伏線回収、軸のぶれなさなど、単話単位でカバーできない要素を評価。
キャラ・アフレコ:キャラクターのパーソナリティ的な魅力・個性、キャラデザ、声優のアフレコが合ってるか。
作画・音楽・演出:作画のクオリティ、OPED/劇伴のクオリティ、アニメーションとしての演出のうまさ。
世界観・構成・設定:世界観・設定のうまさ、クール通しての構成力など。
ポータルの使い方
例えば、「ひぐらし」シリーズの評価が見たいとします。
![](https://assets.st-note.com/img/1686637678046-zj8lO6MpYD.png?width=1200)
こんな感じでフィルタリングできます。
![](https://assets.st-note.com/img/1686637715397-rLnzG8FyRw.png?width=1200)
気が向いたら追記します。
まとめ
アニメの視聴管理に評価を組みあわせて自分だけのオリジナルポータルを作る過程を紹介しました。多分もっと効率のいい方法はあるんだろうけど、自分なりに結構満足してるので良かった。
他にもこんな方法でやってるよーとかあればぜひコメントください。