Ruby | CodeIQの宣伝ツイートテンプレートを新着問題の RSS から生成する

# Ruby | CodeIQの宣伝ツイートテンプレートを新着問題の RSS から生成する

## 概要
CodeIQの宣伝ツイートテンプレートを新着問題の RSS から生成する

## 経緯
CodeIQで出題する問題の次回予告で

~~~
第7回デスマコロシアムは近いうちに出題されるんじゃないかと思います。
テーマは「○○○○○○○○○の○ー○生成機能を実装」です。 
~~~

という告知をしたところ、運営さん・挑戦者さんたちの大喜利会場に。
http://togetter.com/li/721239

で、Twitterで下記のような話の流れになりました。

<blockquote class="twitter-tweet" lang="ja"><p>「びじょとエンジニア」の「デート」生成機能　かもです！o(*^▽^*)oｳﾌﾌ&#10;&#10;QT <a href="https://twitter.com/tbpgr">@tbpgr</a> 第7回デスマコロシアムは近いうちに出題されるんじゃないかと思います。テーマは「○○○○○○○○○の○ー○生成機能を実装」です。 <a href="https://twitter.com/hashtag/%E3%83%87%E3%82%B9%E3%83%9E%E3%82%B3%E3%83%AD%E3%82%B7%E3%82%A2%E3%83%A0?src=hash">#デスマコロシアム</a> <a href="https://twitter.com/suppy193">@suppy193</a></p>&mdash; CodeIQ [コードアイキュー] (@codeiq) <a href="https://twitter.com/codeiq/status/513890275123396608">2014, 9月 22</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" lang="ja"><p><a href="https://twitter.com/codeiq">@codeiq</a> 土日のあいだ、ずっと考えてました。</p>&mdash; CodeIQ [コードアイキュー] (@codeiq) <a href="https://twitter.com/codeiq/status/513890657102864384">2014, 9月 22</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" lang="ja"><p><a href="https://twitter.com/codeiq">@codeiq</a> お疲れ様です。では、これをプレゼント。( ´･ω･)⊃ 「CodeIQ運営者の対（ツイ）ート生成機能」（無理やり）</p>&mdash; 78962 | leet (@tbpgr) <a href="https://twitter.com/tbpgr/status/513904746441084930">2014, 9月 22</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" lang="ja"><p><a href="https://twitter.com/tbpgr">@tbpgr</a> わーい！！&#10;新しい問題が出るごとに、問題名とURLとイケてるキャッチコピーを自動生成してイイカンジのタイミングでツイートしてくれる機能、くださーい！</p>&mdash; CodeIQ [コードアイキュー] (@codeiq) <a href="https://twitter.com/codeiq/status/513917700683218945">2014, 9月 22</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## やりましょう

## 仕様
全てを実現できそうにはないので、実現可能な部分のみ実装します。
CodeIQの運営さんには Ruby を使える方がいるのを知っているので、
実装に関しては躊躇なく Ruby を選択。

* CodeIQのRSSから新着問題の情報を取得します。URLは以下。
    https://codeiq.jp/rss.xml

* CodeIQ運営担当者さんの普段のツイートを参考に基本フォーマットを以下にする
    【タイトル】キャッチ 詳細⇒url #ハッシュタグ

## プログラム

~~~ruby:new_tweet.rb
require 'rexml/document'
require 'uri'
require 'open-uri'
require 'openssl'

uri = URI.parse "https://codeiq.jp/rss.xml"
xml_src = open(uri, :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE).read

def delete_unuse_word_from_title(title)
  title = title.delete('挑戦者求む！')
  title.gsub!(/ by .*$/, '')
  title.gsub!(/【.*】/, '')
end

doc = REXML::Document.new(xml_src)
doc.elements.each('/rss/channel/item') do |item|
  title = item.elements['title'].text
  title = delete_unuse_word_from_title(title)
  print "【#{title}】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒"
  q_url = item.elements['link'].text.gsub(/(.*\/q\d+)\?.*/, '\1')
  print q_url
  print ' #ハッシュタグを設定', "\n"
end
~~~

## 実行確認

~~~bash
$ ruby new_tweet.rb
【素数が最も多い数字の組み合わせは？】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/sinohara/q1068 #ハッシュタグを設定
【コード銀行：切手を切って】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/code_teller/q1093 #ハッシュタグを設定
【電卓を起動するだけの簡単なお仕事です】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/fukumori_daiki/q947 #ハッシュタグを設定
【時限爆弾コードを解除せよ2】！！ここに運営担当のセンス溢れるメッセージ！！詳細 ⇒https://codeiq.jp/ace/yanai_masakazu/q1089 #ハッシュタグを設定
【コードラ2：ノームソート編】！！ここに運営担当のセンス溢れるメッセージ！！詳細 ⇒https://codeiq.jp/ace/yanai_masakazu/q1088 #ハッシュタグを設定
【プログラミング言語★総選挙　本選挙】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/ozy_ozuzu/q1021 #ハッシュタグを設定
【今週のお題：一筆書きできる配置は？】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/thisweek_masuipeo/q1073 #ハッシュタグを設定
【ワンライナーでクールに解くその２】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/o_murayama/q1071 #ハッシュタグを設定
【ワンライナーでクールに解くその１】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/o_murayama/q1070 #ハッシュタグを設定
【Unity 逆引き＆Tips問題】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/yasuyuki_kamata/q1072 #ハッシュタグを設定
【JS：素数と醜いアヒルのコード】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/joboffer_apli/q1079 #ハッシュタグを設定
【PHP：海平の怒りを最小限にせよ】！！ここに運営担当のセンス溢れるメッセージ！！ 詳細⇒https://codeiq.jp/ace/joboffer_apli/q1084 #ハッシュタグを設定
【コード銀行：n番目の数字は？】！！ここに運営担当のセンス溢れるメッセージ！！詳 細⇒https://codeiq.jp/ace/code_teller/q1076 #ハッシュタグを設定
【コード銀行：ヒット・アンド・ブロー】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/code_teller/q1087 #ハッシュタグを設定
【Ruby：ラテン方陣でアナグラム】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/joboffer_apli/q1081 #ハッシュタグを設定
【C++：島の多いエーゲ海】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/joboffer_apli/q1077 #ハッシュタグを設定
【言語不問：素数の数を数えてください】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/joboffer_apli/q1078 #ハッシュタグを設定
【Py：グーテンベルグ印刷の活字】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/joboffer_apli/q1083 #ハッシュタグを設定
【コード銀行：単語を変換しよう】！！ここに運営担当のセンス溢れるメッセージ！！詳細⇒https://codeiq.jp/ace/code_teller/q1086 #ハッシュタグを設定
【サーバに接続出来ないユーザが発生!】！！ここに運営担当のセンス溢れるメッセージ ！！詳細⇒https://codeiq.jp/ace/joboffer_infra/q1085 #ハッシュタグを設定
~~~

## 導入手順
* GitHub参照  
    https://github.com/tbpgr/codeiq_new_tweet

## 補足
本気で実装したら、短縮URLの取得云々ありそうだけど今回はここまで。

## 追記（2014/09/24 21:57）
喜んでいただけました

<blockquote class="twitter-tweet" lang="ja"><p><a href="https://twitter.com/codeiq">@codeiq</a> で　　　き　　　ま　　　し　　　た（部分的に） <a href="http://t.co/mfHptpJw01">http://t.co/mfHptpJw01</a></p>&mdash; 78962 | leet (@tbpgr) <a href="https://twitter.com/tbpgr/status/514451252172701697">2014, 9月 23</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" lang="ja"><p><a href="https://twitter.com/tbpgr">@tbpgr</a> はわわわわっ　まさか本当に作っていただけるなんて！すみません…ありがとうございますっ！！&#10;拝見しました！…すごいです！&#10;ほ、惚れてまうやろーーー(*ﾉωﾉ)ﾎﾟｯ</p>&mdash; CodeIQ [コードアイキュー] (@codeiq) <a href="https://twitter.com/codeiq/status/514606018781659138">2014, 9月 24</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>