ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

【スクリプト】Webサイトをスクレイピングする

f:id:mbaasdevrel:20180418153723p:plain

アプリの中でブックマークをしたり、クリッピングしたいと言ったニーズが良くあります。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を参考にしてください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。