【VRChat API】favorite済みワールド全てをunfavoriteする

対象読者

  • LinuxのCLIが使える人

やることはCLIの初歩なので、成熟している必要はありません。

各コマンドの解説も本記事で行うので、見てみてください 😎

想定環境

  • Linuxのターミナルエミュレーター(CLI)が使える環境
    • curlコマンドが入っており、jqコマンドを導入できる環境
      • WindowsのWSLやmingw等
      • たぶんcygwinや(がんばれば)Git bashでも可

使うもの

本題

そろそろワールドのfavorite枠が足りなくなってきたので、favoriteしてきたワールドのポータルを集めたワールドを作りました ✨

(VRChat始めてから一か月ですが、もう足りなくなりました……。みなさん、すてきなワールドをありがとうございます ♥)

全てのワールドfavoriteをポータルに移植できたので、ワールドfavoriteを全て削除したいと思います。

それは次のCLIコマンドで実現できます。

$ hash=$(echo -n 'aiya000:password' | base64)
$ curl \
    -H "Authorization: Basic $hash" \
    'https://api.vrchat.cloud/api/1/worlds/favorites?apiKey=JlE5Jldo5Jibnk5O5hTx6XVqsJu4WJ26' \
    > favorite_worlds_unformated.json
$ cat favorite_worlds_unformated.json \
    | jq -r '.[].favoriteId' \
    | xargs -I {} \
        curl -X DELETE \
            -H "Authorization: Basic $hash" \
            'https://api.vrchat.cloud/api/1/favorites/{}?apiKey=JlE5Jldo5Jibnk5O5hTx6XVqsJu4WJ26'

上記では確認のため、一度favorite_worlds_unformated.jsonに中間内容を保存しましたが、保存しなくてもいけると思います。 👇

$ curl -H "Authorization: Basic $hash" 'https://api.vrchat.cloud/api/1/worlds/favorites?apiKey=JlE5Jldo5Jibnk5O5hTx6XVqsJu4WJ26' \
    | jq -r '.[].favoriteId' \
    | xargs -I {} curl -X DELETE -H "Authorization: Basic $hash" 'https://api.vrchat.cloud/api/1/favorites/{}?apiKey=JlE5Jldo5Jibnk5O5hTx6XVqsJu4WJ26'

解説

base64

base64は「いい感じのハッシュ値」を作るコマンドです。

VRChat APIはAuthorizationヘッダーに、<VRChat ID>:<VRChat パスワード>という文字列をbase64化した(「いい感じのハッシュ値」にした)ものを要求します。 これはいわゆる「認証情報」です。

認証情報を要求することは…… 例えばVRChatアカウントの情報を、他の人にいじられないようにするために、必要です。

内容は$hash変数に保存しておきます。

curl & favorite_worlds_unformated.json

curlコマンドというのはWeb APIを叩くコマンドです。

-Hというオプションでヘッダーを指定できるので、上記URLの指定する通りに"Authorization: Basic $hash"を指定してあげます。

https://api.vrchat.cloud/api/1/worlds/favoritesというURLは「ユーザーにfavoriteされたワールドを一覧する関数名」のようなものです。 詳細は下記ページにて確認できます。

VRChatはURLクエリーというもので、APIキーを要求します。 上記CLIでいう?apiKey=JlE5Jldo5Jibnk5O5hTx6XVqsJu4WJ26の部分です。

APIキーは、現在はJlE5Jldo5Jibnk5O5hTx6XVqsJu4WJ26ですが、将来変わるかもしれません。

下記ページの章 'Client API Key' で確認できます。

これでfavorite_worlds_unformated.jsonに「favoriteしたワールド一覧」が保存されました。

favoriteしたワールドを全削除する

本稿の本題です。

削除したいワールドの一覧はfavorite_worlds_unformated.jsonに入っていますが、整形されていませんので、jqコマンドを使って整形します。

$ cat favorite_worlds_unformated.json | jq -r '.[].favoriteId'

あとはこれを、VRChat APIのhttps://api.vrchat.cloud/api/1/favorites/{}に流してあげるだけです。

https://api.vrchat.cloud/api/1/favorites/{}{}には「削除したいワールドのfavoriteId」というものがあります。 それは$ cat favorite_worlds_unformated.json | jq -r '.[].favoriteId'で手に入る、整形済み一覧の各要素のことです。

https://api.vrchat.cloud/api/1/favorites/{}は同じくAuthorizationヘッダーとapiKeyを要求するので、乗せてあげます。

curlの-X DELETEは「DELETEで、指定されたURLを実行する」というものです。 今のところは「'Delete Favorite'がDELETEを求めるから、指定してあげる」という感じの理解で大丈夫です。

そして最後に | xargs -I {} curl -X DELETE -H "Authorization: Basic $hash" 'https://api.vrchat.cloud/api/1/favorites/{}?apiKey=JlE5Jldo5Jibnk5O5hTx6XVqsJu4WJ26' で、favorite_worlds_unformated.jsonの整形済み各要素を、'Delete Favorite'に投げてあげる、ということをします。

これで完了です!

筆者プロフィール

my-latest-logo

aiya000(あいや)

せつラボ 〜圏論の基本〜」 「せつラボ2~雲と天使と関手圏~」 「矢澤にこ先輩といっしょに代数!」を書いています!

強い静的型付けとテストを用いて、バグを防ぐのが好き。Haskell・TypeScript。