マストドンのAPIからトゥートの時間を取得したときに少し困惑した話
ちゅうい
あくまで2018年8月頃の話です。
その先の仕様変更によりこの記事は一切存在価値がなくなる可能性がありますのでご注意ください
また、インスタンスによって実際に帰ってくる値は違う可能性がありますので実際に取得してみることをおすすめします
今回はjpを使っています
時刻を取得する
JSONとかparseするの面倒なのでgemを使う
require 'mastodon'
MASTODON_HOST = 'https://hoge.hoge'
access_token = 'hoge'
connection = Mastodon::REST::Client.new(base_url: MASTODON_HOST, bearer_token: access_token)
#account_idのアカウントのトゥートを10件取得
account_id = '00000'
status_data = connection.statuses(account_id, {"limit": "10"})
status_data.each do |toot|
puts "#{toot.content} : #{toot.created_at}"
puts ''
end
今回の場合は自分のアカウントの最新から10件取ってくる状態
これが一番上のトゥート
これが実行結果
<p>クソ良いことを知ったので感謝しかない</p> : 2018-11-28T23:47:30.053Z
<p>RT <span class="h-card"><a href="https://mstdn.jp/@walk__walkway" class="u-url mention">@<span>walk__walkway</span></a></span> 初めて知った<br />tootleの上のアカウントのとこ横にフリックするとアカウント切り替えできる</p> : 2018-11-28T23:47:20.779Z
以下略
取得した時間が違う。しかもなんだこのフォーマット…
どういうこと
なんかマストドンはAPIからトゥートした時の時間とか取ってくるとUTC時間を返してくるぽい
その証明に、先程取得してきた時間+9時間するとJST時間になる
なので、実際に表示する前に9時間分こちらで加算してやる必要があります
対策
帰ってきている値が文字列なので、とりあえずTime.parse()でDate型に変換した後、9時間分加算すればよい
status_data.each do |toot|
jst_time = Time.parse(toot.created_at) + 60 * 60 * 9
puts "#{toot.content} : #{jst_time}"
puts ''
end
とりあえずparse投げとけばなんとかなる感ある(プライドはない)
実行結果
<p>クソ良いことを知ったので感謝しかない</p> : 2018-11-29 08:47:30 UTC
<p>RT <span class="h-card"><a href="https://mstdn.jp/@walk__walkway" class="u-url mention">@<span>walk__walkway</span></a></span> 初めて知った<br />tootleの上のアカウントのとこ横にフリックするとアカウント切り替えできる</p> : 2018-11-29 08:47:20 UTC
UTCってなっちゃってるけど、とりあえずいい感じになりました <終>
rails使う場合はもう少し楽に変換できる
こんな面倒な計算使わなくてもJST時間に変換できるようです。それもメソッド1発で。すげえな
status_data.each do |toot|
jst_time = toot.created_at.in_time_zone('Tokyo')
puts "#{toot.content} : #{jst_time}"
end
rails様様でした。 <終>
Author And Source
この問題について(マストドンのAPIからトゥートの時間を取得したときに少し困惑した話), 我々は、より多くの情報をここで見つけました https://qiita.com/huequica/items/ff581662ec237a01e7f5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .