Skip to content

Instantly share code, notes, and snippets.

@saiten
Last active December 26, 2015 07:09
Show Gist options
  • Save saiten/7113103 to your computer and use it in GitHub Desktop.
Save saiten/7113103 to your computer and use it in GitHub Desktop.
destiny公式のアカウントを監視して、ベータコードっぽいものをtweetしたら登録してみるスクリプト
# destiny beta code getter
twitter = require 'ntwitter'
Spooky = require 'spooky'
async = require 'async'
#
# config
#
twitterToken =
consumer_key: 'CONSUMER_KEY'
consumer_secret: 'CONSUMER_SECRET'
access_token_key: 'ACCESS_TOKEN'
access_token_secret: 'ACCESS_TOKEN_SECRET'
psnAccount =
username: 'USERNAME'
password: 'PASSWORD'
targetScreenName = "DestinyTheGame"
#
# challenge redeem
#
challengeRedeem = (account, code, callback) ->
console.log "challenge code : #{code}"
config =
child:
transport: 'http'
casper:
pageSetting:
loadImages: false
loadPlugins: false
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5)'
logLevel: 'debug'
verbose: true
waitTimeout: 10000
spooky = new Spooky config, (err) ->
throw err if err?
# access bungie site
spooky.start 'http://www.bungie.net/en/User/coderedemption', ->
loggedIn = @evaluate -> $("input#text_code:visible").length > 0
if loggedIn
@echo "already logged in"
@click "div#alert"
@bypass 6
# psn login
spooky.then -> @clickLabel "Sign In"
spooky.then -> @clickLabel "PlayStation Network"
spooky.waitForPopup 'Psnid'
spooky.withPopup 'Psnid', [{ account: account }, ->
@fill 'form#mainform', {
j_username: account.username
j_password: account.password
}, true
]
# input code
spooky.waitUntilVisible 'input#text_code'
spooky.then [{ code: code }, -> @sendKeys 'input#text_code', code ]
spooky.then -> @click "a.btn_submitCode"
spooky.then [{ code: code }, -> @wait 1000, => @capture code + '.png' ]
spooky.run -> @emit 'finish'
spooky.on 'error', (err, stack) ->
console.log err
spooky.on 'console', (line) ->
console.log line
spooky.on 'finish', ->
callback()
#
# watch timeline
#
watchTimeline = (twitterToken, account, targetScreenName) ->
twit = new twitter twitterToken
twit.stream 'user', (stream) ->
stream.on 'data', (data) ->
if data?.text? and data?.user?.screen_name is targetScreenName
console.log "#{data.user.screen_name} : #{data.text}"
if codes = data.text.match /[A-Z0-9]{3}-[A-Z0-9]{3}-[A-Z0-9]{3}/g
# shuffle codes
random = codes.map Math.random
codes.sort (a,b) -> random[a] - random[b]
console.log "codes : #{codes}"
async.eachSeries codes, (code, callback) ->
challengeRedeem account, code, callback
stream.on 'end', (response) ->
console.log response
stream.on 'destroy', (response) ->
console.log response
#
# start
#
watchTimeline twitterToken, psnAccount, targetScreenName
@m0806153287
Copy link

ありがとうございます。
良い物めっけたと喜んだのですが以下の様になってうまくいきません
良かったら回答お願いします


C:\node>coffee code_getter.coffee
DestinyTheGame : XXX-XXX-XXX
codes : XXX-XXX-XXX
challenge code : XXX-XXX-XXX
{ [Error: Child terminated with non-zero exit code 127] details: { code: 127, signal: null } }

node v0.8.25 windows7 64bit
↓code127はPATHの問題みたいですがもうなにがなんだか
SpookyJS/SpookyJS#14

何だこいつと思われたら放置かコメント削除してください。慣れないことして疲れ果てました
失礼しました

@saiten
Copy link
Author

saiten commented Nov 5, 2013

わー、見過ごしてました。すいません。
もしかしたらnodeのバージョンが少し古いのかもしれないですね。
参考までに自分の環境は↓の感じです。

OSX 10.8.5
node@0.10.10
phantomjs@1.9.2
casperjs@1.0.2
spookyjs@0.2.4

またbetaコード配布されるかもしれないので参考までに。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment