「Twitter記念日(周年記念日)」の画像ファイルの置き場所

結論

2021年10月31日現在、15周年の画像までを確認しています。

「Twitter記念日(周年記念日)」とは

こういうやつです。

gyazo.com

Twitter の API で取得できる media(画像)の URL は原寸大画像を示してはいない

結論

たとえば、API で取得できる media_url_httpshttps://pbs.twimg.com/media/FAlJ_JsUUAAgOSq.jpg であったとします。この URL に wget をしても原寸大画像は得られません*1

常に原寸大画像を取得するためには https://pbs.twimg.com/media/FAlJ_JsUUAAgOSq?format=jpg&name=orig のようにします。つまり media_url_https に対して以下の処理を施します。

  • 拡張子を取り除く(ドットを含む)
  • パラメータとして以下の2つを付与する
    • format=拡張子(ドット不要)
      • たとえば format=jpg
    • name=orig

Ruby でこの処理を行うスクリプト例は以下のとおりです。

url = 'https://pbs.twimg.com/media/FAlJ_JsUUAAgOSq.jpg'
extension_including_dot = File.extname(url)
extension_without_dot = extension_including_dot[1..]
url_without_extension = url.gsub(extension_including_dot, '')

"#{url_without_extension}?format=#{extension_without_dot}&name=orig" #=> "https://pbs.twimg.com/media/FAlJ_JsUUAAgOSq?format=jpg&name=orig"

*1:ただし、元画像のサイズが一定以下ならば原寸大画像となる

Twitter REST API の trends で用いる WOEID の一覧(日本)

結論

以下のとおりです。

Kitakyushu: 1110809
Saitama: 1116753
Chiba: 1117034
Fukuoka: 1117099
Hamamatsu: 1117155
Hiroshima: 1117227
Kawasaki: 1117502
Kobe: 1117545
Kumamoto: 1117605
Nagoya: 1117817
Niigata: 1117881
Sagamihara: 1118072
Sapporo: 1118108
Sendai: 1118129
Takamatsu: 1118285
Tokyo: 1118370
Yokohama: 1118550
Okinawa: 2345896
Osaka: 15015370
Kyoto: 15015372
Japan: 23424856
Okayama: 90036018

補足

available というエンドポイントのレスポンスに全地域(国)のデータが含まれているので、その中から countryJapan のものを抽出すればよいです。

(参考) available の個別レスポンス例

以下の例は、Ruby の gem 経由で取得した available エンドポイントの個別レスポンスの例です*1

=> {:name=>"Kitakyushu",
 :placeType=>{:code=>7, :name=>"Town"},
 :url=>"http://where.yahooapis.com/v1/place/1110809",
 :parentid=>23424856,
 :country=>"Japan",
 :woeid=>1110809,
 :countryCode=>"JP",
 :id=>1110809}

*1:Yahoo! の API のエンドポイントはもう存在しないようです

Ruby の Twitter の gem にて、凍結ユーザの 'name' は Twitter::NullObject で返ってくる

gyazo.com

結論

標題の通りなので、たとえばデータベースにユーザデータを格納しようとする際に nameNOT NULL 制約をかけていたりバリデーションをかけていたりすると、エラーになります。

対処法の一つとしては Twitter::NullObject のときは例外として特定の文字列に置き換えることでしょうか。ただし注意することがあり、このオブジェクトは以下のような評価になるということです。ここで objTwitter::NullObject のオブジェクトとします。

obj.nil? #=> true
obj == true #=> false
obj == false #=> false
obj || 'hoge' #=>(空っぽ。何も表示されない)
(obj || 'hoge').class #=> Twitter::NullObject

obj || 'hoge'hoge が返ってこないことには注意が必要です。

Powered by はてなブログ