<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>grotta blog &#187; Ruby</title>
	<atom:link href="http://grottad.com/blog/tag/ruby/feed" rel="self" type="application/rss+xml" />
	<link>http://grottad.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 16 Sep 2015 01:02:29 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>RubyでGmailを使う</title>
		<link>http://grottad.com/blog/228</link>
		<comments>http://grottad.com/blog/228#comments</comments>
		<pubDate>Wed, 04 Feb 2015 12:42:34 +0000</pubDate>
		<dc:creator><![CDATA[おだむら]]></dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[備忘録]]></category>

		<guid isPermaLink="false">http://grottad.com/blog/?p=228</guid>
		<description><![CDATA[ちょっとしたテストや、メールサーバーがない環境でメール送信をしたい場合、Gmailの利用が非常に便利です。備忘録を兼ね、RubyでGmailライブラリを使用したメールの送信方法を紹介します。 ※ここで …<a href="http://grottad.com/blog/228" class="more">続きを読む</a>]]></description>
				<content:encoded><![CDATA[<p class="pd5" style="margin-bottom:5px;">ちょっとしたテストや、メールサーバーがない環境でメール送信をしたい場合、Gmailの利用が非常に便利です。<br />備忘録を兼ね、RubyでGmailライブラリを使用したメールの送信方法を紹介します。</p>
<p class="pd5" style="font-size:1.2rem;line-height:1.3em">※ここで紹介する例は、GmailのSMTPサーバーを利用した標準mailライブラリでの送信方法ではなく、Gmailそのものを使用する例です。</p>

<pre class="crayon-plain-tag">gem install gmail</pre> 
 
<pre class="crayon-plain-tag">require 'gmail'

gmail = Gmail.connect("Gmailアドレス","パスワード")　#Gmailに接続
gmail.deliver do
    to "送信先アドレス"
    subject "件名"
    text_part do
        body "本文"
    end
end
gmail.logout #切断</pre> 
<p class="pd5">上記が送信に必要なスクリプトの全てになりますが、これだけでは送信できません。<br />Ruby側で何もエラーが出ないので原因究明に手こずりましたが、解決方法はGoogleアカウントの設定にありました。</p>
<p class="pd5">まず、Googleアカウント設定の『2段階認証プロセス』の項目を確認します。</p>
<p>
<img src="http://grottad.com/blog/wp-content/uploads/2015/02/gmail_1.png" alt="" class="alignnone size-full wp-image-244" />
</p>
<p style="background-color:#000;color:#fff;padding:5px 0;margin-top:20px;text-indent:7px;"><strong>◆2段階認証プロセスがオフの場合</strong></p>
<class="pd5">『安全性の低いアプリのアクセス』をオンにするだけでメール送信が可能になります。</p>
<p>
<img src="http://grottad.com/blog/wp-content/uploads/2015/02/gmail_21.png" alt="" class="alignnone size-full wp-image-245" />
</p>
<p>
<img src="http://grottad.com/blog/wp-content/uploads/2015/02/gmail_2.png" alt="" class="alignnone size-full wp-image-237" />
</p>
<p style="background-color:#000;color:#fff;padding:5px 0;margin-top:20px;text-indent:7px;"><strong>◆2段階認証プロセスがオンの場合</strong></p>
<p class="pd5">アプリパスワードを生成します。</p>
<p>
<img src="http://grottad.com/blog/wp-content/uploads/2015/02/gmail_3.png" alt="" class="alignnone size-full wp-image-246" />
</p>
<p>
<img src="http://grottad.com/blog/wp-content/uploads/2015/02/gmail_4.png" alt="" class="alignnone size-full wp-image-247" />
</p>
<p class="pd5">生成されたアプリパスワードをGmail.connectのパスワードにすることで二段階認証を通過してメールの送信が可能になります。</p>
<p class="pd5">ちなみに、二段階認証プロセスを有効にするには、携帯電話のメールアドレスが必要となります。<br />また、二段階認証プロセス有効後は、デバイスごとにパスワードの認証が求められ、都度、携帯電話に送られてくるパスワードを入力する必要があるため、運用・管理におけるアカウントの共有化が難しくなります。</p>
<p class="pd5"><strong>Gmail使用のメリット</strong><br />・自前のメールサーバーを必要としない<br />・文字化け対策が不要</p>
<p class="pd5"><strong>デメリット</strong><br />・セキュリティが不安<br />・Googleの監視下にある</p>
<p class="pd5">セキュリティ面や運用性を考えると用途が限られてきますが、ちょっとしたテストなんかには十分使えるんじゃないでしょうか。</p>]]></content:encoded>
			<wfw:commentRss>http://grottad.com/blog/228/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rubyはじめました。</title>
		<link>http://grottad.com/blog/83</link>
		<comments>http://grottad.com/blog/83#comments</comments>
		<pubDate>Thu, 29 Jan 2015 14:21:28 +0000</pubDate>
		<dc:creator><![CDATA[おだむら]]></dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Twitter API]]></category>

		<guid isPermaLink="false">http://grottad.com/blog/?p=83</guid>
		<description><![CDATA[今までちょっとしたスクレイピングはPHPで済ましていましたが、最近はAjaxで要素をロードするサイトも多く、PHPだけでスクレイピングを行うのは少々困難になってきました。もっと柔軟で効率の良いスクレイ …<a href="http://grottad.com/blog/83" class="more">続きを読む</a>]]></description>
				<content:encoded><![CDATA[<p><img src="http://grottad.com/blog/wp-content/uploads/2015/01/MG_3839.png" alt="" class="alignnone size-full wp-image-90" /></p><p class="pd5">今までちょっとしたスクレイピングはPHPで済ましていましたが、最近はAjaxで要素をロードするサイトも多く、PHPだけでスクレイピングを行うのは少々困難になってきました。<br />もっと柔軟で効率の良いスクレイピング方法はないものかと色々調べてみたところ、「どうやらスクレイピングにはRubyが適している」ということが分かりました。<br />Rubyには以前から興味があったものの、なかなか必要に迫られることもなくスルーしていましたが、良い機会なので少し勉強してみることにしました。</p>
<blockquote style="margin-bottom:15px;"><p>Ruby（ルビー）は、まつもとゆきひろ（通称 Matz）により開発されたオブジェクト指向スクリプト言語であり、スクリプト言語が用いられてきた領域でのオブジェクト指向プログラミングを実現する。 また日本で開発されたプログラミング言語としては始めて国際電気標準会議で国際規格に認証された事例となった。</p><a href="http://ja.wikipedia.org/wiki/Ruby" class="origin">ウィキペディア(Wikipedia)</a></blockquote>
<p class="pd5">
クローラーを作りたかったこともあり、早速『<a href="http://www.amazon.co.jp/gp/product/4797380357" target="_blank">Rubyによるクローラー開発技法</a>』という本を購入。この本の売りである「運用例」はAPIを利用した例が多く、自分にはあまり成果がありませんでしたが、序盤〜中盤でのクロールとスクレイピングに必要なライブラリについての解説は比較的丁寧だったこともあり、Ruby未経験の私でも、基本ノウハウを得ることが出来ました。
</p>
<p class="pd5">で、実際にRubyを触ってみた感想ですが、すごく良いです。<br />流石、“エレガントなプログラミング言語”と言われるだけあり、行末のセミコロンや条件分岐の{}が不必要だったりと、とても見やすく、より短いスクリプトでコーディングが可能です。</p>
<p class="pd5" style="margin-bottom:0;">例えば、100回繰り返す処理をPHPで書くと</p>
<pre class="crayon-plain-tag">&lt;?php
for($i=0;$i&lt;100;$i++){
 //処理
}
?&gt;</pre> 
<p class="pd5" style="margin-bottom:0;">となりますが、Rubyだと…</p>
<pre class="crayon-plain-tag">100.times do
 #処理
end</pre> 
<p class="pd5" style="margin-bottom:3rem">実にシンプルです。</p>
<p class="pd5">Rubyの強みは正規表現処理にあると思いますが、便利なライブラリの数々も標準で用意されており、PHPでは面倒だった“スクレイプ→パース→XML出力→外部サーバーにFTPアップロード”という工程もRubyならサクっと書くことができ、常に人気プログラミング言語ランキングの上位にいるのも納得できます。</p>
<p>残念ながら、RubyはPHPのようにHTML内に簡単にプログラムを組み込めないため、一般的なWEBサイトの制作においてはなかなか使い道がないのですが、上記の工程のように、バックグラウンドで行うデータの収集・解析・作成には十分活躍できそうなので、今後は部分的にでも積極的にRubyを導入していきたいと思います。</p>
<p class="pd5">最後に、スクレイピングとは関係ありませんが、Twitter APIを使った“自動フォロー返し”をRubyで作ってみたので載せておきます。</p>
<pre class="crayon-plain-tag">gem install twitter</pre> 
 
<pre class="crayon-plain-tag">require 'twitter'

USERNAME = 'XXXXXXXXXX'
CONSUMER_KEY = 'XXXXXXXXXX'
CONSUMER_SECRET = 'XXXXXXXXXX'
ACCESS_TOKEN = 'XXXXXXXXXX'
ACCESS_TOKEN_SECRET = 'XXXXXXXXXX'

client = Twitter::REST::Client.new(
  :consumer_key =&gt; CONSUMER_KEY,
  :consumer_secret =&gt; CONSUMER_SECRET,
  :access_token =&gt; ACCESS_TOKEN,
  :access_token_secret =&gt; ACCESS_TOKEN_SECRET
)

followers = []
client.follower_ids(USERNAME).each do |id|
  followers.push(id)
end

friends = []
client.friend_ids(USERNAME).each do |id|
  friends.push(id)
end

client.follow(followers - friends)</pre> 
<p class="pd5 clearfix" style="margin-top:25px;margin-bottom:0;">ちなみに同じことをPHPで書くとこうなります。</p>
<pre class="crayon-plain-tag">&lt;?php
require_once 'twitteroauth/twitteroauth.php';

$consumer_key = "XXXXXXXXXX";
$consumer_secret = "XXXXXXXXXX";
$access_token = "XXXXXXXXXX";
$access_token_secret = "XXXXXXXXXX";

$to = new TwitterOAuth(
  $consumer_key,
  $consumer_secret,
  $access_token,
  $access_token_secret
);

$followers = $to-&gt;get('followers/ids', array('cursor' =&gt; -1));
$friends = $to-&gt;get('friends/ids', array('cursor' =&gt; -1));

foreach ( $followers-&gt;ids as $i =&gt; $id) {
  if (empty($friends-&gt;ids) or !in_array($id, $friends-&gt;ids)) {
    $req = $to-&gt;post('friendships/create', array('user_id' =&gt; $id));
  }
}
?&gt;</pre> ]]></content:encoded>
			<wfw:commentRss>http://grottad.com/blog/83/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
