1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】TwitterAPI使用時に、httpで送られてくる画像のURIをhttpsに変換した方法

Posted at

はじめに

yukiと申します。DMMWEBCAMP にお世話になって、今は WEB エンジニアとして勤務しつつ、自分で仲間を集めてサービス開発したり、プログラミングの家庭教師したり毎日エンジニアライフをエンジョイしています。

未経験から目指している方向けのサポートやエラー質問なども引き受けておりますので、気になった方は DM へお願いします。

前提と問題

RailsをAPIとして活用していて、gem twitterを使って画像収集をしていた際に問題が起こりました。
twitter APIが取得してくる画像のURIがhttpから始まっており、せっかくhttps通信ができているサイトに「安全ではありません」の警告が出てしまいました。

ちなみに、その時コンソールにはこんなエラーが出ていました。

Mixed Content: The page at 'https://hogehoge.com' was loaded over HTTPS, but requested an insecure image 'http://hogehoge.net/hoge.jpg. This content should also be served over HTTPS.

mixed contentとか言うらしいです。
最初は今回まとめる方法が思いつかず、フロントの方で何とかしていましたが、本来バックでやるべきなので修正しました。

対策

examples_controller.rb
  def show
    client = Authorization.init # 独自クラスです。クライアントの情報を入れています。
    @data = client.search("#収集したいハッシュタグ", result_type: "recent").take(4).collect do |tweet|
      {
        "image": "#{tweet.user.profile_image_url.to_s.sub('http', 'https')}",
        "name": "#{tweet.user.name}",
        "text": "#{tweet.full_text}",
        "tweet_link": "#{tweet.uri}"
      }
    end
    render json: {tweet: @data}
  end

何をしているか一応ご説明すると、特定のハッシュタグのついたツイートを4件収集し、jsonデータとして返しています。
今回重要なのは"image": "#{tweet.user.profile_image_url.to_s.sub('http', 'https')}",の部分です。

これは他のエンジニアの方に教えていただいたのですが、rails consoleでuser.profile_image_urlを見てみると、ちょっとよくわからないデータの形(?)で結果が返りますが、to_sすることで綺麗なURLになりました。

そこに、subメソッドを当てて変換している感じです。

注意としてはgsubではなくsubを使っていることです。
理由としては、万が一画像のURLの一部(先頭以外)に"http"と言う文字列があった場合に誤変換して、画像が表示されなくなってしまうからです。

誰かの参考になれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?