6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

IDCF CloudAdvent Calendar 2015

Day 2

IDCFクラウドのMorioクーポンを一括取得するワンライナー

Posted at

はじめに

IDCFクラウドはIDCフロンティアが提供している国内のパブリックIaaSクラウドです。IDCFクラウドでは割引クーポンを使うことができて、サービスリリース時などによく500円〜3000円程度のクーポンを配布しています。

そんな太っ腹なIDCFクラウドに対して僕は日々をクーポン乞食として活動しており、新しいクーポンが出ていないかチェックする日常を送っています。

この記事では以前に開催された「MORIOを探せ!キャンペーン」で配布されていたクーポンを一括取得する方法を紹介します。
残念ながらキャンペーン自体は終了していますが、今後同じようなキャンペーンが開催されるかもしれないのでクーポン乞食で得た知見を共有したいと思います。

MORIOを探せ!キャンペーン

詳細は次のURLを御覧ください。

前述の通りキャンペーンはもう終了しています。ざっくり説明すると、Webサイトのどこかに潜む複数のMORIOを探し出せば最大3000円のクーポンがもらえるというキャンペーンです。
ちなみにMORIOというのはこういうやつで、IDCFクラウドのマスコット?的なアレです。

morio.png

多分、筋肉的なものがモリモリっとしてるからMORIOなんでしょう(違うかも)
名前的には♂な感じがしますが性別はないそうです(嘘かも)

キャンペーンサイトの中段真ん中の「どんなカタチ?」のMORIOをクリックすればだいたいイメージはつくかと思います。
Webサイトのいろんな場所にMORIOがいて、そのMORIOをクリックするとクーポンコードがポップアップされる仕組みです。

一度、クリックしてみてください。

このサンプルMORIOをクリックしたら、エンジニアなら誰もがこう思うはずです。

「これはソースコード見れば全部書いてあるな:sunglasses::bulb:

実際そうでした:yum:

答え探し

キャンペーンは終わっていますがソースコード自体はまだ公開されています。

まずはキャンペーンサイトのソースコードを開きます。
十中八九JavaScriptで実現しているだろうということはわかっているのでそのあたりをみてみます。

<!--クーポンアイコン用-->
<link href="/sevice_shared/css/cloud/cp/coupon.css" rel="stylesheet" type="text/css" media="all">
<script src="http://cdnjs.cloudflare.com/ajax/libs/zeroclipboard/2.2.0/ZeroClipboard.min.js"></script>
<script src="/sevice_shared/js/cloud/cp/coupon.js"></script>
<script src="/sevice_shared/js/cloud/cp/jquery.easing.1.3.js"></script>
<!--クーポンアイコン用-->

おっと、いかにも怪しそうなjsファイルがありますね。
coupon.jsが怪しそうです。こいつを開いてみましょう。
http://www.idcf.jp/sevice_shared/js/cloud/cp/coupon.js

中を開いてみるとこんな感じです。

jQuery(document).ready(function(){if(!$(".cloud_coupon").length){return;}var setting={sample:{t:"&#12371;&#12428;&#12399;&#12469;&#12531;&#12503;&#12523;&#12391;&#12377;&#12290;",c:"&#74;&#69;&#48;&#45;&#88;&#88;&#88;&#88;&#88;&#88;",p:"&#48;"},SITER:{t:"&#49;&#44;&#48;&#48;&#48;&#20870;&#28961;&#26009;&#12463;&#12540;&#12509;&#12531;&#71;&#69;&#84;&#65281;",c:"&#74;&#69;&#48;&#45;&#83;&#73;&#84;&#69;&#82;&#49;&#48;&#48;&#48;&#69;&#78;",p:"&#49;&#44;&#48;&#48;&#48;"},SREAT:{t:"&#53;&#48;&#48;&#20870;&#28961;&#26009;&#12463;&#12540;&#12509;&#12531;&#71;&#69;&#84;&#65281;",c:"&#74;&#69;&#48;&#45;&#83;&#82;&#69;&#65;&#84;&#53;&#48;&#48;&#69;&#78;",p:"&#53;&#48;&#48;"},IETWE:{t:"&#53;&#48;&#48;&#20870;&#28961;&#26009;&#12463;&#12540;&#12509;&#12531;&#71;&#69;&#84;&#65281;",c:"&#74;&#69;&#48;&#45;&#73;&#69;&#84;&#87;&#69;&#53;&#48;&#48;&#69;&#78;",p:"&#53;&#48;&#48;"},RSAIW:

//...省略

おっともう正解を見つけてしまいましたね。。。
なんとあっけない:scream:

しかしさすがに生テキストでは書いてありませんでした。
見た感じ10進数の文字参照で記述してあります。

ワンライナー

というわけで、JavaScriptを取得して文字参照を展開するワンライナーです。
今回はRubyで書きました。

ruby -ropen-uri -rcgi -e 'open("http://www.idcf.jp/sevice_shared/js/cloud/cp/coupon.js").read.scan(/c:"(.+?)"/) { |m| puts CGI.unescapeHTML(m[0]) }'

実行するとこうなります。
(一応クーポンは隠してあります)

$ ruby -ropen-uri -rcgi -e 'open("http://www.idcf.jp/sevice_shared/js/cloud/cp/coupon.js").read.scan(/c:"(.+?)"/) { |m| puts CGI.unescapeHTML(m[0]) }'
JE0-XXXXXX
JE0-hogehoge1
JE0-foobar1
JE0-hogehoge2
JE0-foobar2
JE0-hogehoge3
JE0-foobar3
JE0-hogehoge4
JE0-foobar4

わかりやすく書くとこうなっています。

require "open-uri"
require "cgi"

# クーポンが書いてあるJavaScriptのURL
url = "http://www.idcf.jp/sevice_shared/js/cloud/cp/coupon.js"

# JavaScriptのソースコードを取得する
javascript = open(url).read

# クーポンコードを展開して出力する
javascript.scan(/c:"(.+?)"/) { |m| puts CGI.unescapeHTML(m[0]) }

おわりに

次回はさらに難しいキャンペーンを楽しみにしています :grin::sparkles:

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?