🐲

【ドラゴンクエストXオンライン】Misskey の表示名に現在の職業とレベルを反映する

2024/09/19に公開

仕組みは単純でマイページに相当するキャラクター ID 入りのページから情報を取得して

https://hiroba.dqx.jp/sc/character/667538238772/

Misskey.py で API を叩いて反映しているだけです。

https://misskeypy.readthedocs.io/ja/latest/api/misskey.html#misskey.Misskey.i_update

情報取得の準備

キャラクター ID 入りのページはどこ?

マイページをログインしていない状態で開くとログインへと促すリダイレクトページ

$ curl -I https://hiroba.dqx.jp/sc/home/
HTTP/1.1 302
Date: Fri, 20 Sep 2024 03:06:00 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Expires: Wed, 31 Dec 1969 23:59:59 GMT
Pragma: no-cache
Cache-Control: no-cache
Location: https://hiroba.dqx.jp/sc/login/
Content-Type: text/html

が開いてしまう状態になってしまうので、マイページにログインした状態マイページのソースをブラウザなどで表示して meta property="og:url" のところに記述されている URL がキャラクター ID 入りのページになります。
数字の部分がキャラクター ID ですね。

	<meta property="og:url" content="https://hiroba.dqx.jp/sc/character/667538238772/"></meta>

マイページの公開範囲を設定する

マイページの情報を取得するためにはマイページ設定の「マイページ全体の公開」が「制限なしで公開」に設定されている必要があります。

情報を取得してみる

この辺のソースから取得すればよさそうです。

ブラウザの開発者ツールなどで調べると <div id="myCharacterRadius"> にありそうです。

$ curl -s https://hiroba.dqx.jp/sc/character/667538238772/ | pup "div#myCharacterRadius"
<div id="myCharacterRadius">
 <p id="myCharacterTitle">
  ぷるぷるネコ
 </p>
 <p id="myCharacterImg">
  <a href="/sc/character/667538238772/">
   <img src="https://hiroba.dqx.jp/sc/character/667538238772/img/bup/" alt="おるどら">
  </a>
 </p>
 <div id="myCharacterStatus">
  <h2 id="myCharacterName">
   [おるどら]
  </h2>
  <div id="myCharacterStatusList">
   <dl>
    <dt>
     キャラID
    </dt>
    <dd>
     : XO331-433
    </dd>
    <dt>
     種 族
    </dt>
    <dd>
     : エルフ
    </dd>
    <dt>
     性 別
    </dt>
    <dd>
     : 女
    </dd>
    <dt>
     職 業
    </dt>
    <dd>
     : レンジャー
    </dd>
    <dt>
     レベル
    </dt>
    <dd>
     : 131
    </dd>
   </dl>
  </div>
  <!-- /#myCharacterStatusList -->
 </div>
 <!-- /#myCharacterStatus -->
</div>

ここから職業とレベルを取得すればよさそうです。

$ curl -s https://hiroba.dqx.jp/sc/character/667538238772/ | pup "div#myCharacterRadius text{}" | tr -d '\t\n' | sed -e 's/\xc2\xa0/ /g' -e 's/^.*職 業: \(.*\)レベル: \(.*\)/\1\2/'
レンジャー131

情報が取得できれば、いろいろなことに利用できそうです。

【今日の豆】pup って何

CSS セレクタを指定して簡単にスクレイピングできるツールです。
先人が詳しい説明を書いてくれています。助かります。
https://outofmem.hatenablog.com/entry/2015/01/18/121136
https://github.com/ericchiang/pup

Misskey のアクセストークンを取得する

やはり先人の素晴らしい記事がありますので、参考にして取得してください。

https://zenn.dev/sion_pn/articles/85c22b9cdad159#misskeyアカウントでアクセストークンを発行

必要な権限の種類は アカウントの情報を変更する write:account のみです。

権限の一覧 | Misskey Hub

リポジトリ

https://github.com/sharl/misskey-dqxpresence

姉妹品に

https://github.com/sharl/mastodon-dqxpresence

もあります。

Discussion