MAGAZINE

ルーターマガジン

クローリング/スクレイピング

Sinatra APIでGoogle検索結果取得RPA

2018.07.11
Pocket

こんにちは、コロンビア人の大学院生エンジニアgaruです。
さて、自動で業務を行ってくれるRPAですが、、、
今回はサーバーを立てて簡単にRPAを実行する方法を紹介します。

APIサーバーとは?

APIサーバーとは、簡単に言うと
「リクエストを送ると、レスポンスを返してくれるサーバー」
という事になります。

そんなAPIサーバーを簡単に作成できるものが、フレームワークです。
以下に、言語ごとのフレームワークをあげています。
(ほんの一部です)

Ruby

  • Ruby on Rails
  • Sinatra

Python

  • Django
  • Flask

PHP

  • CakePHP
  • laravel

どこかで聞いたことあるのではないでしょうか?
アプリケーションはこれらフレームワークを駆使して、作られています。
それぞれ得意不得意があり、今回はRubyで最も簡単に使えるフレームワークであるSinatraを使っていきます。

Sinatraで簡単にAPIサーバーを立てる

Sinatraをインストールしていない人は、インストールしましょう

$ gem install sinatra

main.rbというRubyファイルを作ります。
中身は以下の5行だけでok!

require 'sinatra'

get '/' do
return 'Hello World'
end

では、サーバーを立ち上げます

$ ruby main.rb
== Sinatra (v2.0.1) has taken the stage on 4567 for development with backup from Puma
Puma starting in single mode...
* Version 3.11.3 (ruby 2.3.4-p301), codename: Love Song
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://localhost:4567
Use Ctrl-C to stop

http://localhost:4567 にアクセスしてみましょう。
このように表示されたら成功です!


実はmain.rbdoからendの中身でRPAなり、色々な事が行えます。
サーバー側でどのような返答を返すかは、仕様によります。
(是非、色々作ってみましょう)

Sinatraで簡単RPA

今回はAPIサーバーに検索キーワードを渡す

Googleの検索結果のタイトル一覧を返す
と言うサーバーを立てましょう。
タイトル一覧の取得はSeleniumを使います。

インストール

$ gem install selenium-webdriver

web.rbというRubyスクリプトを作成してください。

require 'sinatra'
require 'selenium-webdriver'

get '/google' do
  # Seleniumの初期設定
  ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36'
  caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => {args: ["--no-sandbox","--disable-setuid-sandbox","--headless", "--disable-gpu", "--user-agent=#{ua}", 'window-size=1280x800']})
  driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps
  # Seleniumでクローリング
  driver.navigate.to("https://www.google.co.jp/search?q=#{params[:key]}")
  sleep(1)
  titles = driver.find_elements(:css, 'h3.r').map{|e| e.text}.join("\n")
  driver.quit
  return titles
end

サーバーを立てます。

$ ruby web.rb

別のターミナルを開いて、リクエストを送ります。
今回はURLにパラメーターを渡す事で、検索キーワードを指定できます。

$ curl http://localhost:4567/google?key=rooter
株式会社ルーター – データクローリング・スクレイピングによるビッグデータ収集
rooterの意味・使い方 - 英和辞典 Weblio辞書
rooterの意味・用例|英辞郎 on the WEB:アルク
ルーター - Wikipedia
株式会社ルーターの会社情報 - Wantedly
「Rooter」をApp Storeで - iTunes - Apple
Rooter | Define Rooter at Dictionary.com
Urban Dictionary: rooter

結果は多少の誤差があるかもしれません、他のキーワードでも試してみてください!
このサーバーを公開すれば、誰でもRPAを実行できますね。

最後に

簡単だったでしょうか?
APIサーバーは作り込むほど複雑になり、使う側に負担がかかります。
是非、わかりやすい設計を心掛けましょう。

また、弊社では上記のようなRPA技術を応用して、サービスの在庫連動やECの自動出品など様々なRPAサービスを展開しております。高度なRPAサービス構築が必要でしたら、ぜひお問い合わせください。

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから