約束の地

キャロ組

Twitter の gem でツイートに埋め込まれた URL を t.co 形式で取得する

結論

Tweetオブジェクトの uris メソッドを用いた戻り値*1の要素に対してさらに url メソッドを用いる。

具体例

以下のツイートを例とします。

上記のツイートには 2つ の URL が埋め込まれています。それぞれの URL を t.co 形式で取得します。

まずは Tweetオブジェクト を取得する

まずは上記のツイートを Twitter::Tweet のオブジェクトとして取得します。以下のようになります。

client = Twitter::REST::Client.new do |config|
  config.consumer_key        = "YOUR_CONSUMER_KEY"
  config.consumer_secret     = "YOUR_CONSUMER_SECRET"
  config.access_token        = "YOUR_ACCESS_TOKEN"
  config.access_token_secret = "YOUR_ACCESS_SECRET"
end

tweet_obj = client.status(1004056787513774081)

ツイートに埋め込まれている URI を配列で取得する

次に、取得できた tweet_obj が持つ uris メソッドを用います。戻り値は配列です。戻り値は具体的にはツイートに埋め込まれている URI の集合です。

embedded_uris = tweet_obj.uris #=> Array

取得した配列の要素に url メソッドを適用する

上記の embedded_uris という配列の要素数はここでは 2 です。ツイートに埋め込まれている URI の数になります。

あとはそれぞれの配列の要素に対して url メソッドを用いれば、t.co 形式でリンクの URL が返ってきます*2

puts embedded_uris[0].url #=> https://t.co/PUbnmOle1K
puts embedded_uris[1].url #=> https://t.co/eMCtCN9bbD

補足

「ツイートに URL が埋め込まれているか否か」を調べるためには Tweetオブジェクト に対して uris? メソッドを用いればよいです。

*1:配列

*2:展開した形で帰ってきてほしい場合は expanded_url メソッドを用います

Powered by はてなブログ