1. hanoopy

    Posted

    hanoopy
Changes in title
+herokuとGoogleAppsScriptを使って、ブログ更新をツイートする
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,131 @@
+
+#cronはGoogleAppsScriptで
+GoogleAppsScriptというツールから、定期実行スクリプトを登録できる。スクリプトは.gsというJavaScriptっぽいやつ。
+[無料でお手軽Cron!Google Apps Scriptを使ってみる。](http://kijtra.com/article/cron-by-google-apps-script/)
+ほぼこのサイトの通りで、URLをfetch実行させて、戻り値(ブラウザ出力内容)をメール送信する。
+URLのページが404とかでもcronエラーにならないように、引数 **muteHttpExceptions**を追加した。こうすると、404なら404のページ内容が返ってくる。
+普通に管理画面があって、日時とか繰り返しを設定できる。
+
+```javascript:script.gs
+function myFunction() {
+ var response = UrlFetchApp.fetch("https://heroku-appli-9090.herokuapp.com/-cont-/-view-"
+ , { muteHttpExceptions:true });
+ MailApp.sendEmail(
+ "-my-mail-address-@gmail.com",// 送信先メール
+ "Cronの実行結果ですよ",// メール件名
+ "",
+ {
+ htmlBody: response.getContentText()
+ }
+ );
+}
+```
+
+#herokuでWebアプリ作成
+上記cronでURLを呼び出せるように、herokuでプロジェクトを作る。
+
+参考にしたサイトはこことか。
+[Heroku に Rails アプリをアップ](http://railsgirls.jp/heroku/)
+
+
+herokuのチュートリアルだけでも十分できる。はずだが、いろいろはまった。
+
+> % foreman start web
+
+でローカル実行できるようにしておく。(http://localhost:5000)
+herokuのチュートリアルに載ってた。
+[Run the app locally](https://devcenter.heroku.com/articles/getting-started-with-ruby#run-the-app-locally)
+
+ローカルで試してから、`git push heroku master`して本番で見る。
+
+#RubyonRailsで、ツイートするプログラム作成
+> % rails new app-name --skip-active-record
+
+でrailsプロジェクトを作り、そこに入ってからremoteのherokuにプッシュできるようにしておく。
+「--skip-active-record」はDBを使わないRailsプロジェクトを作成するための引数。
+([DB不要のRailsアプリの作り方](http://qiita.com/h7kayama/items/8b0870716777494f8c31))
+
+> % rails generate controller tweet-blog-update tweet
+
+でコントローラとビューを作成。
+
+```ruby:TweetBlogUpdateController.rb
+require "twitter"
+require "simple-rss"
+require "open-uri"
+class TweetBlogUpdateController < ApplicationController
+ def post
+ title = self.getTitle()
+ if title != "-" then
+ self._post(title)
+ end
+ render :text=> title
+ end
+
+ def _post(title)
+ client = Twitter::REST::Client.new do |config|
+ config.consumer_key = "--your consumer key--"
+ config.consumer_secret = "--your consumer secret--"
+ config.access_token = "--token---"
+ config.access_token_secret = "--token secret--"
+ end
+ message = "blog update \"#{title}\" http://--blog-url--"
+ client.update(message)
+ end
+
+ def getTitle()
+ filename = 'http://フィードURL'
+ rss = SimpleRSS.parse open(filename)
+
+ # 記事タイトルを取得
+ title = rss.items[0].title
+ # 最終更新日時を取得
+ lastUpdate = rss.items[0].published
+
+ # 本日0時0分の日時オブジェクトを作成
+ tyear = Time.now().year
+ tmonth = Time.now().month
+ tday = Time.now().day
+ dayStart = Time.local(tyear, tmonth, tday, 0, 0, 0)
+
+ # 本日の記事があればツイート
+ if lastUpdate - dayStart <= 0 then
+ title = "-"
+ end
+ return title
+ end
+
+end
+
+```
+
+* requireしているうちでは、twitterとsimple-rssはGemfileに記載が必要であった。
+
+> gem 'twitter'
+> gem 'simple-rss'
+
+参考にしたのはこちらとか。[simple-rssメモ](http://d.hatena.ne.jp/cuspos/20080123/1201066236)
+最初rubyで作ってて、rssっていうライブラリだったんだけど、それはgemがなかったので、simple-rssになった。
+
+* getTitleメソッドでは、フィードの1件目のタイトルと日時を取得する。1件目の記事投稿時間が本日の0時0分より後であれば(=本日投稿の記事があれば)、タイトルを返す。無ければハイフンを返す。
+
+* postメソッドでは、getTitleで取得したタイトルがハイフンでなければ、_postメソッドにツイートさせる。タイトルをブラウザに出力する(=cronでのメール内容になる)
+
+* コンシューマーキーとアクセストークンはこちらで取得する。
+[Twitter Application Management](https://apps.twitter.com/)
+
+
+# その他
+* herokuでもschdulerというアドオンでタスク実行(cron)できるらしい。それを使おうと思ったのだけど、カード登録が必要になる。カード登録しようと思ったら、そんなはずはないと思うんだけど、支払いページが表示できなかった。
+![billingページ](http://i.gyazo.com/1112f2e7e3639158dd2e48cc8c9b4dbb.png)
+?????
+
+
+* herokuアプリを作って最初のpushで、エラーになった。これはシンプルなディレクトリをあげようとすると、PHPのアプリ(Framework:PHP)として登録されてしまい、その場合はindex.phpがないとエラーになるみたい。index.phpをルートに置くと解消されると言う謎仕様。
+[Heroku push rejected, no Cedar-supported app detected](http://stackoverflow.com/questions/8361475/heroku-push-rejected-no-cedar-supported-app-detected)
+[herokuにただのWebページを乗せてみる](http://d.hatena.ne.jp/softsama/20120715/1342373494)
+>
+index.phpがないと怒られる。エラーメッセージからは推測不可能な所がキモい。
+
+
+