日々精進

新しく学んだことを書き留めていきます

CasperJSでスクレイピングしたデータを送信する先を環境毎に変える

※追記 もっといい方法がありました。詳細は→2014-07-16 - 日々精進


CasperJSが今どの環境で実行されているかは2014-07-03 - 日々精進に書いた方法で、環境変数から取得する。
スクレイピングしたデータをHTTPで送信している場合、そのリクエストはCasperJS内のヘッドレスブラウザ内から送信されるのでそこにCasperJS本体から文字列を渡すのがちょっと難しい。
以下のように、CasperJS本体がJSファイルを書き出し、それをclientScripts経由でヘッドレスブラウザに読み込ませることで解決した。

fs = require 'fs'
system = require('system')
port = if system.env.ENVIRONMENT == "production" then "3000" else "3001"
portTmpFile = "./port.tmp.js"
if fs.exists(portTmpFile) then fs.remove(portTmpFile)
fs.write(portTmpFile, "var port = \"#{port}\";", 'w')

instance = require('casper').create
  clientScripts: [
    "./port.tmp.js"
  ]
instance.start "..."
instance.wait 1000, ->
  this.evaluate ->
    scrapeOhlc = ->
      ...
      $.ajax
        "url": "http://localhost:#{port}",
        "type": "PUT",
        "contentType": "application/json",
        "data": body,
        "dataType": "json"
instance.run()

もっと楽な方法ありそうだな。。