- 2012-05-14
- 初版
- 2012-06-29
- メールアドレスの大量取得について追記
- 2012-09-17
- ルゥ、自重
キャラクターといっても Jenkins Ninja とかではなく、単に Jenkins を cron の代用で使っているだけの内容なので、 Jenkins 関連の話題をお探しの方にとっては役に立たないと思われます。
- 人間に単純作業を繰り返させると鬱になります
- Jenkins さんはビルド以外にも使えます
- シナモロールに投票しましょう (ステマ)
2012年5月10日から2012サンリオキャラクター大賞が始まりました。
Web からの投票の場合、毎日投票できるようになっており、各日とも複数キャラクターに1票ずつ投票できるようになっています。しかしながらブラウザで投票をするという単純作業を毎日繰り返すと人間は鬱になります。ましてや投票するキャラクターがたくさんいる場合は手間もかかりますし投票漏れも起こりやすくなります。
なので人間様が手を下すのではなく執事の Jenkins さんにやってもらいましょう。
セッションIDは送らなくても投票できるっぽいので、面倒なセッションIDを送らずにフォームだけを送ればよいです。仮にセッションIDがあってもメールアドレスとかを毎回送る謎仕様のようですし。
というわけで bash スクリプトで wget を実行するだけの簡単なジョブを作ります。
メールアドレス、年齢、性別、都道府県などは適宜設定してください。application/x-www-form-urlencoded
で送るので、メールアドレスにプラス記号を含んでいる場合などはエスケープすることを忘れずに。
投票するキャラクターは CHAR_IDS
変数で渡すようになっているので、ビルドパラメータを設定します。複数ある場合はスペース区切りでIDを書いてください。
あとは毎日実行するようにスケジュールを設定します。投票期間は8月末までなので8月で終わるようにします。
投票済み等のエラーがあった場合にはクエリパラメータに error=1 が含まれるアドレスにリダイレクトされるようなので、エラーがあったことが分かるように Groovy Postbuild Plugin を使ってみましょう。日によって投票先を変えるかもしれないので、どこに投票したかも表示するようにするとよいでしょう。
Jenkins さんによる投票の後に人間がブラウザで投票すると投票済みエラーとなるし、その逆もまたしかりなので、おそらく投票できているのでしょう。黄色と青で一目瞭然。
念のため wget が取得した HTML ファイルもアーカイブ化しておきます。後々のトラブルシューティングで必要になるかもしれませんから。
最終的な config.xml はこのようになりました。
<?xml version='1.0' encoding='UTF-8'?>
<project>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties>
<hudson.model.ParametersDefinitionProperty>
<parameterDefinitions>
<hudson.model.StringParameterDefinition>
<name>CHAR_IDS</name>
<description>1:US, 77:CN, 95:JL</description>
<defaultValue>77 95 1</defaultValue>
</hudson.model.StringParameterDefinition>
</parameterDefinitions>
</hudson.model.ParametersDefinitionProperty>
</properties>
<scm class="hudson.scm.NullSCM"/>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<jdk>(Default)</jdk>
<triggers class="vector">
<hudson.triggers.TimerTrigger>
<spec>H H(2-6) * 5-8 *</spec>
</hudson.triggers.TimerTrigger>
</triggers>
<concurrentBuild>false</concurrentBuild>
<builders>
<hudson.tasks.Shell>
<command># export https_proxy=http://PROXY:8080
rm -rf out
mkdir out
for CHAR_ID in $CHAR_IDS ; do
wget "https://sanriocharacterranking.com/vote.php?character_id=${CHAR_ID}" --post-data="mail=YOURNAME@YOURHOST&age=29&sex=2&address=14&country=&eventmail=1&character_id=${CHAR_ID}&voteButton=submit" -O out/${CHAR_ID}.html
done
</command>
</hudson.tasks.Shell>
</builders>
<publishers>
<hudson.tasks.ArtifactArchiver>
<artifacts>out/*.*</artifacts>
<latestOnly>false</latestOnly>
</hudson.tasks.ArtifactArchiver>
<org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder>
<groovyScript>if (manager.logContains(".*error=.*")) {
manager.buildUnstable()
}
manager.addShortText(manager.build.getBuildVariables().get("CHAR_IDS"))</groovyScript>
<behavior>0</behavior>
</org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder>
</publishers>
<buildWrappers/>
</project>
#scr2012 で Twitter 検索してみてください。誰がどのキャラクターに投票したのかがおそらく出てくるかと思います。人間によるブラウザでの投票であれば、投票後に tweet button でだれに投票したかを呟けるように誘導されるため、このようなツイートが現れています。
毎日投票できるようにし毎日ツイートさせることで、露出を増やそうという意図があるのでしょうが、投票を自動化してしまったことによってその意図を反故することになってしまいます。意図に従う場合には Twitter Plugin でビルド結果をツイートさせるようにするとよいでしょう。
自分の場合はタイムラインがうるさくなりそうなので実施していません。やりたい方はご自由にどうぞ。
デザイナで1番偉いお姉さんが複数のデバイスを使うことで「毎日5票投票」を推奨していますし、2番目に偉いお姉さんも同様に「持てるデバイスを駆使してシナモンファンの本気を見せてくれ」とのことだそうです。
実際には複数デバイスを使う必要はなく単にメールアドレスで多重投票チェックをしているだけなので wget で送るメールアドレスを変えるだけでよいです。メールアドレスなんていくらでも作れるので、ビルドスクリプトで for 文を一つ追加する程度でできるでしょう。
デバイスやメールアドレスが複数あろうが一人一票が正しいことだと個人的には思っているので、自分は未実施です。「本気」を出したい方はご自由にどうぞ。執事さんが多数の奴隷を使って本気を出したら投票どころじゃなくなるので節度のある範囲でね。
いつから記載されるようになったか把握できていませんが、2012年6月28日時点で投票サイトに以下のような注意書きが増えていました。
現在、フリーのメールアドレスを利用して、機械的に大量投票するケースが増えています。これらの票については、調査した上で無効にします。ご了承ください。節度のある投票をしていただけるよう、どうぞよろしくお願いいたします。
メールアドレスの大量取得、だめ絶対。
キャラクター大賞締め切りせまる!|Wish me mell オフィシャルブログ(サンリオ公式)
ルゥ
2人とも甘いな
オレはスマフォとPCとフリーアドレスを駆使して、
1日10人分の投票を毎日続けてるんだぜ
ルゥ、自重。
というわけでシナモロールに投票しましょう。