アプリの中でブックマークをしたり、クリッピングしたいと言ったニーズが良くあります。URLを登録して終わりでも良いですが、よりユーザフレンドリーにするためには、そのWebサイトの情報を表示してあげると便利です。
しかしアプリから直接Webサイトにアクセスすると、Webサイト側の負荷が高くなってしまったり、情報の取得部分に関するコード(ネットワークアクセスしてレスポンスを解析するといった)が多くなってしまいます。
そういったロジックはiOS/Androidそれぞれ実装するのも大変です。そこで使ってみたいのがスクリプト機能です。
参考
HTMLを取得して、そのタイトルと詳細(metaタグのdescription)を取得するだけならば正規表現でもできますが、より面白くするためにmono0x/extractcontent: ExtractContent for Ruby 1.9+を使ってみます。これはHTML中の本文と思われる部分を抽出してくれるライブラリです。
NCMBのスクリプトは1ファイルでないといけないので、上記ExtractContentのソースをそのまま貼り付けます。
実際の処理内容
処理内容は次のようになります。Rackアプリケーションの中で呼び出されますので、パラメータ url を指定します。これが取得対象のURLです。
require "rack" def call(env) req = Rack::Request.new(env) url = req.params['url'] opt = {:waste_expressions => /お問い合わせ|会社概要/} ExtractContent::set_default(opt) response = HTTParty.get(url) body, title = ExtractContent::analyse(response.body) # 本文抽出 [200, {"Content-Type" => "application/json"}, [{ title: title, body: body }.to_json] ] end
このコードをスクリプトとして実行すると、以下のように結果が返ってきます。メタデータでWebサイト側で設定している内容とはまた違った面白さがあります。
{ "title": "Android上で実行できるプログラミング環境まとめ - ニフクラ mobile backend(mBaaS)お役立ちブログ", "body": "\nAndroidはiOSよりも自由度が高く、それもあってAndroidの中で比較的自由にプログラミングを行えるようになっています。...iOS上でプログラミングを実行/学習できるアプリまとめ\nblog.mbaas.nifcloud.com\n" }
まとめ
コードはNCMBMania/ruby-scrapingにアップしてあります。scraping.rbをNCMBのスクリプトとしてアップロードしてもらえれば利用できます。スクリプトは無料プランでも月50,000回まで利用できます。組み込んでも十分利用できるのではないでしょうか(URLごとにキャッシュをデータストアに残しても良さそうです)。
スクリプトの使い方についてはスクリプト (iOS) : 基本的な使い方 | ニフクラ mobile backendを参考にしてください。