Hatena::ブログ(Diary)

Portal:siro

2014-07-22

ニンジャの更新が来たらYOするプログラムつくった

| 23:59 | ニンジャの更新が来たらYOするプログラムつくったを含むブックマーク

何のひねりもないタイトル通りの内容です。

「NINJADAZO」にYOを送ると、以下の条件でYOが届きます。*1

  • 時間が朝9時〜深夜2時の間(2時〜9時の間はシーライフ保護のためシステム停止します)

かつ

  • スリケンが飛んだ時
  • 開始アイキャッチ(【NINJASLAYER】)が飛んだ時
  • 前のツイートから6時間以上開いた時

のいずれかの条件を満たした時にNINJADAZOからYOが届くはずです。
なお3分に1回の頻度で動作していますので、最大3分の遅れが発生します。こんな感じで。
検知元ツイート:


<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

f:id:siro_xx:20140722233529p:image


昨日と今日の更新でアイキャッチと6時間ツイートが開いた時は動作確認したのですが、スリケンがまだなのでもしかしたら検知失敗するかもしれません。条件として一番簡単なのでまず無いけど。


やめたい時はYOアプリからNINJADAZOをCANCELかBLOCKかしてもらえればやめられると思います。
ニンジャ気になるけどちまちまTwitter見ていられない人へ。

◆重点◆手遊みで作ったプログラムのためスリケンを検知したりしなかったりしすぎたりするバグが発生するかもしれないし突然サービスをやめるかもしれない。真面目にリリースしているサービスではないのでなんかおかしなことがあっても怒らないでほしい。そういうのを俗に免責事項とか言ったりするけどそういうなんかそういうものを理解できる人だけ使ってもらえるとうれしい。◆重点◆


ソースコード

という前置きは置いといて、単にYO APIが面白そうだからなんか多少は実用性のあるものを作りたかっただけです。

<?php

// ニンジャの更新があったらYOするスクリプト
// 1.◆◆をスリケンとカウントして抽出
// 2.【NINJASLANYER】アイキャッチは1つ前のツイートの末尾が0〜9の数字でなかった場合に抽出(終了アイキャッチとの区別)(時間指定はツヨイサキブレ後や与太話後のスリケン無しアイキャッチに対応できないので×
// 3.通常投稿は過去6時間以内に投稿がなかった場合に抽出

// 外部ファイル読み込み
require_once "common.php";

// 定数定義(define面倒くさいので便宜的にこう)
$LAST_TWEET_HOURS = 6;

// ファイル読み込み
$fp = fopen("最終TweetID保持用テキスト.txt","r");
$fline = fgets($fp,64);
fclose($fp);

$json = new Jsphon_Decoder();
$njslyr = $json->decode($st->getUserTimeline(array('id' => 'NJSLYR')));

// 新着tweetがない場合何もせず終了する
if ( strnatcmp($njslyr[0]["id_str"],$fline) <= 0){
	echo "no new tweet.";
	return;
}

$yo_flag = false;

// デフォルト20件取得
// 1件前のTweet内容も確認したいので、19件目から開始
for ($i = 18; $i >= 0 ;$i--){
	if (strnatcmp($njslyr[$i]["id_str"],$fline) > 0){
		if (strpos( $njslyr[$i]["text"], "◆◆" ) !== false){
			// スリケンであるか
			$yo_flag = true;
			break;
		}elseif (strpos( $njslyr[$i]["text"], "【NINJA" ) !== false &&
			!is_numeric(mb_substr(trim($njslyr[$i+1]["text"]),-1))) {
			// アイキャッチかつ直前のツイート末尾が数字ではないか(連載中断アイキャッチの除外)
			$yo_flag = true;
			break;
		}elseif (strtotime($njslyr[$i+1]["created_at"]) < strtotime("-" . $LAST_TWEET_HOURS . " hour")) {
			$yo_flag = true;
			break;
		}
	}
}

// YOを送る
if ($yo_flag){
	$curl = curl_init();
	$params = array('api_token' => 'API_TOKEN_KEY');
	curl_setopt($curl, CURLOPT_URL, 'http://api.justyo.co/yoall/');
	curl_setopt($curl, CURLOPT_POST, true);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
	$response = curl_exec($curl);
	var_dump($response);
	curl_close($curl);
}

// 直近ツイートのIDを記録
$fline = $njslyr[0]["id_str"];
$cfp = fopen("最終TweetID保持用テキスト.txt","w");
fwrite($cfp,$fline,strlen($fline));
fclose($cfp);


一部ぼかしましたがほぼ元ソースです。common.phpにはrequireとか書いてあり、TwitterAPIはServices_Twitter経由で呼んでいます。$stはTwitterAPIのOAuth認証済みオブジェクトです。
「定数を定義していない」「DBじゃなくファイルI/O」「そもそもクラスもメソッドも定義せずベタ書き」って辺りにもう手抜きの跡が透けてみえる感じですが、なんかこう……なんか……。

YO!

YO APIの話でもしましょう!

Yo APIを試してみた - Qiita http://qiita.com/pomu0325/items/9990dc1b0dbafd72f3e6

大体上のサイトの通りにやったのですが、備忘録も兼ねてちろちろと。
まずはYOの『個人用』アカウントを取得します。アプリを端末に入れてそこから普通のアカウントとしてサインアップすればいいです。
それからここにアクセスして、『開発用』アカウントを取得します。
CallbackURLは後から変えられるし深く考えなくていいと思います。
Personal〜に最初に取得した個人用アカウントを入力して、サインアップするとAPI Keyが貰えます。メールで届きます。
他の記事を見ると2〜3日かかったとか書いてあって、じゃあゆっくりやるかーって思ったら即座に来ました。システム落ち着いたんですかね?

ダッシュボードにログイン(上記ページの「Have an account? Click to sign in.」から普通にログインできます。見落としてて暫くうろうろしてました……)すると、サンプルとか色々見れたりします。


APIにどんな機能があるのかはそこに書いてある通りなので省きます。
とりあえずPOSTでAPIKey(特定の人にYOする場合はその人のID)を投げつけてやればよいです。割と簡単でした。


あと備忘録として書いておくべきことは……ええと、どうやら開発用アカウントは一つの個人垢+メールアドレスに対して複数取得できるようです。
上限いくつまでってのは把握してませんが常識的な範囲なら多分大丈夫なのではないかな……。



とりあえずこれで寝てたりソシャゲしてたり仕事してたりしててもニンジャ到来を察知できるのでごあんしんだ。
でもこれを書いていたらリアルタイムで更新が追えていないという二律背反めいた罠が……ヤンナルネ。

*1:本当は押すだけでYOが送れるボタンスクリプトがあるのだけど案の定はてなダイアリーでは動かなかった

2014-07-05

知らない人と待ち合わせするときに相手に伝える(伝えてもらう)べきこと

| 15:20 | 知らない人と待ち合わせするときに相手に伝える(伝えてもらう)べきことを含むブックマーク

どこかのブロガーさんが別のブロガーさんと会えなかった記事を読んで思ったことをツイッターで書いたのですがまとめきれなかったので改めてこちらでまとめます。
「ネット経由で会った人とサシオフする危険性」とかそういうのは置いといて。

マジで服装は正しく伝えてください。

滅多に色文字デカ文字使わないマンである私が熱く強調したいレベルで本当に、本当にお願いします。本当に!!!
ただでさえ知らない人と会うのは緊張します。男だろうが女だろうが単数だろうが複数だろうがネットで毎日お喋りしていようが緊張するものはします。
その緊張の中で「指定時間に待ち合わせ場所についたのにその人がいない!」というのはパニックの元です。お腹いたくなっちゃいます。
あるいは「多分この人……?いや違うな……?どうだ……?」というのも「とりあえず話しかけてみて違ったらごめんなさーい☆でいいか!」ってできない心配性マンには中々堪えます。
いつも待ち合わせ相手を見つけた時私は「あの、○○さんですか?」って恐る恐る聞きますが、内心では「やべーこの人絶対○○さんだわwwwやっと会えたwwwwww」みたいな確信を持って聞きたいのです。だって心配性だもの。

というわけでマジでお願いします、っていうのと、どういう伝え方がよくてどういう伝え方がダメなのかっていうのを書いておきます。

×主観的・相対的な特徴

「コミュ症でおどおどしてるのですぐにわかると思います」「背が高いんですぐ見つかるかと」「変な鞄持ってるんで(以下同文)」「デブで(以下略)」「ブス(略)」

待ち合わせとは第三者から自分を見つけてもらうことです。そこに主観的な特徴を盛り込まれても正直わかりません。
本当にその待ち合わせ場所に相手と自分しかいなくて、「あ、この人だな」って確信するための特徴としてしか背の高低は使えません。
不特定多数がいるような駅や有名スポットでの待ち合わせの場合、貴方と同じような背格好の人がいる可能性は普通にあります。

また「デブで」「ブスで」などのネガティブな主観特徴は「この人かな?」と思っても話しかけるのを躊躇います。
あってるにしろ、間違ってるにしろ、遠回しにその人を「デブ(ブス)」と言っていることになり、大変失礼になります。
また、経験則上自分でデブとかブスとか名乗る人のほとんどが「よくいるぽっちゃり」「よくいる普通の顔」だったりするので、マジで当てにならないです。自虐はほどほどに。

「変な鞄」もそうです。せめて「缶バッチが100個くらいついてる変な鞄です」とか具体的かつそうそう被らないような特徴を告げてください。

あと「コミュ症でおどおど」「声が小さい(大きい)」みたいな「実際に声を掛けてみるまではわからない」特徴も待ち合わせの際には勘弁してほしいです。

こういう指定をされると大概私から発見することができず、相手の方に見つけてもらうのを待つか、「着いたら電話してください」「その場で手を振ってください」などのその場指示を出さざるを得なくなります。*1
ちなみに「電話してください」は「今この場所で携帯電話を使って電話している人を探す」行為になるので、ハンズフリー派も携帯を手に持っていただけると個人的には嬉しい。

△正面、あるいは至近距離から見ないと特定できないもの

セルフレームの眼鏡」「泣きぼくろ」「出っ歯」「胸が大きい(小さい)」など。
確信には使えますが、人混みの中からこれを見つけるのは難しいです。いちいちすべての人の正面に回ってみるわけにもいきませんし。

こういう情報は服装と一緒に書くのがベストです。

△服の種類・ブランドを書く

これも具体例を書きますが、人によってはわかりづらいかもしれないです。
たとえば貴方が男性だったとして、女性から「ピンクのドルマンにクロップドパンツです」と言われて、正確に想像できますか?
貴女が女性の場合はそう初対面の男性に告げるイメージをしてみてください。どれほど正しく伝わると思いますか?

服の種類(特に女性)はめちゃくちゃ豊富です。そしてそれを正しく理解しているかは人によります。
僕は女ですが、正直あまり詳しい方ではありません。特に自分が普段着用しないジャンルの服は全くもってわかりません。
相手がそれで十分理解できる、と確信できる場合を除き、なるべく平易な言葉で言ったほうが伝わりやすいと思います。

先程の例だと「ピンクのちょっとゆったり目のトップスに、七分丈くらいのズボンです」のほうがまだ伝わりやすいのではないでしょうか。

とはいえスーツ、セーラー服、ポロシャツなど多くの人がわかるものまで上着とズボン(スカート)って言い換えてたらかえってわかりにくいので、
目安として「異性の親に言っても何の問題もなく伝わる」ならオッケーだと思います。

あとブランドはわかりません。ユニクロだろうがしまむらだろうがローリーズファームだろうが遠目から見て区別なんてつきません。

ちなみに僕はわからないものが来たらその場でググります。シロは陰ながら努力しているのです。*2

○服や手荷物の色、形を書く

可能なら全身、最低でも上着(一番外側に着ているもの)、もしくはそれに匹敵する腰から上の特徴を書いてください。特に色は重要です。半袖長袖の区分以上に色のほうが探しやすいです。
ただ色も割と主観的になるので(「ピンク」と一言で言っても淡いものからビビットまで色々ある)、別の色にも見えそうなら素直にそう書いておくといいと思います。「白に近いピンク」と言っていただければシロは白い服の人も条件に入れて探します。

目印にぬいぐるみを持っていきます系の人は遭遇できるまで常に持っていてください。腕に抱えられるとよほど大きく無い限り隠れてしまうので、手で鷲掴みにされるのがベストです。*3

靴は人混みで見分けるのは中々大変なパーツなので、個人的には書いても書かなくてもいいと思っています。
一方帽子はだいぶ強い判断基準になるので、帽子があるなら積極的に書くといいと思います。

以前「水色のセーター*4」の方と待ち合わせした時に中々見つからなくて(最終的に相手の方に見つけてもらいました)おかしいなと思ったら、真っ黒なコートを着ていてその中に水色のセーターを着ていたという例もありました……。





という感じです。もし僕や、僕以外でも、知らない人と待ち合わせる時に参考になれば幸いです。
ま、わからなかったら即座に電話なりDMなりするのが一番なんですけどね。

*1:電話してくださいは相手の到着時間が不透明な場合にも使うので、私に待ち合わせ時に電話してくれと言われたからと言って必ずしも告げ方がダメだったというわけではないです

*2:まず同じ女性ものの服の種類くらい理解しろというもっともな指摘は……すみません

*3:頭に載せられるならモアベターですが、そこまで無理には要求しません

*4:色は仮です

2014-07-03

パズドラ経験者のためのロードラ入門

| 00:43 | パズドラ経験者のためのロードラ入門を含むブックマーク

タイトルは偉そうですが例のごとくいつものステマ記事です。
主に「パズドラはわかるけどそれ以外のゲームは触ってないや」とか「ロードラって最近聞くけど何?」みたいな人向けにちらっと書きます。
基本的な説明や攻略情報は公式:http://smartphone.acquire.co.jp/rtd/とか、wiki:http://rtd.rtwiki.net/とか、その辺を見てください。
あと僕も始めて数ヶ月かそこらなので細かい部分は正確じゃないかもしれないです。すいません。

ロードラとは

「ロード・トゥ・ドラゴン(Road to Dragons)*1」の略です。
Android/iPhone対応のいわゆるネイティブアプリです。(よくわからない人は「パズドラみたいに端末にダウンロードして使うアプリ」のことと思っておいてください)

どういうゲームなの

PTを組む→ダンジョンに入る→道中の敵を倒す→ドラゴン(ボス)を倒す→クリア→以下繰り返し
平たく言うとパズドラ系のゲームです。
ただ、僕も長らく誤解していたのですが(道作りって書いてあったからこういう系:http://www.flashgames.jp/game/15240/Pipe_Games.htmlのゲームかと思っていたのです)、パズル部分はそれほど難しくなく、パズドラよりはテクニカルな要素とか向き不向きとかは少ない感じです。コンボ?なにそれおいしい?


f:id:siro_xx:20140702233740p:image
上に表示したダンジョン画面(移動中)ですごく雑な説明をしますと、
上のほうに小さく表示されているもの:左から獲得コイン、獲得モンスター、メニュー 説明は割愛
画面中央にどんと表示されてるのがMAP(の一部)、なんか剣持ってる女の子が自分のPTのリーダーです。ぬるぬる動きます。
その下とか前方(キャラは左から右に移動します)にいる見るからに敵っぽいのが敵です。
赤いのが火属性で黄色いのが光属性です。パズドラとだいたい同じです、やったぜ!(属性に関しては省略します)
床(パネル)が同じ色になっているのは、それを踏むと同じ色(属性)のPTメンバー(ロードラでは「ユニット」と呼びます)の能力がちょっと上がります。上がると、上がった分だけ+1とか+2とか出ます。(最大10)


で、ここから先がロードラ特有の部分の説明になるのですが、
左中央下に表示されている「Soul 22」という数字が、ソウルです(説明になってない)。すいませんこれ割と重要なので後述します。
で、LIFEと表示されてるのがそのまま、現在のHPです。0になったらゲームオーバー。コンティニューかサヨナラか選べます。
最後に画面下に表示されている8つの四角(パネルと呼びます)が、移動兼攻撃用のユーザー操作部分です。
とりあえずここでは左上に表示されてるハートとか剣とかは無視してください。押したパネルに書いてある通りにキャラが動きます。
動かす時に先程出てきた「ソウル」を1消費します。1マス進むたびに1ではなく、1パネル消費するたびに1です。
たとえば左下のハートがついたパネルを押すと、ソウルが21になり、女の子の真下にいる赤い敵と戦闘をした後、最終的に今いる場所から斜め右下のマスに移動します。


f:id:siro_xx:20140702233741p:image
で、こちらが戦闘画面です。さっきと違うダンジョンで申し訳ない上に、さっきドラゴンっていった割に明らかにドラゴンじゃないボスで恐縮なのですがその辺はご勘弁ください。
画面左がパーティメンバー、画面右が敵。あと3ターンで攻撃してきます。
攻撃方法はというと、パネルを選択して押します。押したパネルが消え、消したパネルに書いてある武器(クラスといいます)を持っているパーティーメンバーがいれば、その子が攻撃します。この辺のルールもパズドラとだいたい同じです。
タテ・ヨコ・ナナメの一筆書きで同時に何枚でも(といいつつ画面には8枚しか表示されてないので最大8)消すことができます。*2
移動の時はパネル1枚消費するたびにソウル1消費でしたが、攻撃の時は基本的には消費しません。ただし、つなげたパネルのクラスが異なる場合は、その都度ソウル1消費します。
ソウルが0になるといろいろとピンチなので、なるべく同じクラス同士をくっつけて消すようにします。


あとメニュー画面とかこの光ってるパネル何なのとか説明するときりがないのでこの辺で終了。

パズドラと何が違うの

ここから下は特にパズドラプレイ済であることを前提で書いていきます、ご了承ください。

ストーリーの有無

パズドラには基本的にストーリーというものはありません。パズドラま!のような派生ストーリーや、二次創作、あるいはモンスターの元ネタになった英雄や悪魔の話などはありますが、ゲーム内でキャラが喋ったりそのキャラの解説がされることはありません。一枚絵と名前から読み取れることが全てです。

ロードラの場合、全ユニットに数種類の台詞と数行にわたるストーリーがあります。びびる。
しかもこのストーリーがなんというか 重い 。重くないのもあるのですが、これはなんなんですかね、アクワイア節?ディバゲ(ディバインゲート)のストーリーから中二病成分を引いた感じです。
そしてこのストーリーは期間限定配信のダンジョンで補完されたりもするので、ストーリーを読む・世界観を考察する楽しみがあるというのが第一の特徴です。
もちろん読まなくてもゲームプレイはできるのでごあんしんを。

ユニットの育て方

単純なレベル上げはあんまり変わらないです。(大成功や超成功の条件が違うくらい)
他の不要なユニットやレベル上げ用のユニット(よりしろといいます)を合成すると、レベルが上がります。MAXになったら進化ができます。

ただこの進化がクセモノで、進化素材ではなく進化ポイントというものを使います。
レベル上げのための合成と同じように、それぞれのユニットには「進化素材として使う場合の進化ポイント」が設定されていて、
その進化ポイントの合計値が必要な進化ポイント以上になれば進化できます。序盤はダブったユニット*3を使えば簡単に進化できますが、神とか王とかの強いキャラ(まとめて神王将と呼ばれることが多いです)は、進化のために進化ポイントが多い子を育成する必要があったりしてなかなか大変です。
「素材でボックスが埋まる」ことはないですが「進化素材にする子を育てないといけない」ので、この辺りは一長一短です。
多分課金してガチャ引きまくるのでなければ、パズドラほどボックスを拡張する必要はないというのが個人的な感覚です。

あ、スキルレベルという概念はない*4ので、スキラゲのために何十体も同じモンスターを確保する必要はないです やったぜ!

ちなみに覚醒(パズドラでいう究極)も進化素材ではなく進化ポイントが必要な上に、「覚醒ポイント」という「モンスターを倒すことで溜まる経験値ゲージのようなもの」を貯める必要があるので、こちらはパズドラよりも大変です。

レアガチャ難易度が多少ゆるい

個人的にはパズドラも(他のソシャゲに比べたら)ゆるい方とは思うのですが、ロードラのガチャは毎日当たる子が変わります。
なので狙った子をある程度狙って引くことができ、「めっちゃレアだけどこの子もう持ってる……」ってことがあんまり起こらないです。*5
いわゆる「ハズレ」ユニットも、パズドラでいう銀卵レベルの子が出るので(星卵レベルは出ない)、ダメージはそこまで大きくないです。……たぶん。

あと、一部のレアガチャユニットは「レアユニットエリア」という配信エリアから確率ドロップします。課金せずドロップを狙うという選択もアリ。

スタミナ回復が5分

……に、なりました。お陰で全然尽きない。ステージクリアするのにパズドラと同じかそれ以上に時間かかるのに回復半分、おまけにスタミナ消費が多いダンジョンでも30とかしか消費しないので(普通はだいたい10〜20くらい)全然減らなくなりました……。
使い切れない……。

リーダースキルの扱い

くっそ大事なことを書き忘れるところでした。これがあるから私はディバゲをやめてロードラをやってるんでした。

パズドラではだいたいのキャラクターにリーダースキルがありますが、使用できるのは「リーダー」と「フレンド」のみです。冒険者(フレンドじゃない人のモンスター)ではリーダースキルを発動できません。
このため強いだけでなく、自分の手持ちモンスターと噛み合うリーダースキル持ちのモンスターを出してくれるフレンドを確保することが重要になってきます。
普段はそれで問題ないのですが、たまに「制限つきダンジョンに行きたいのに条件に合致するフレンドが一人もいない」とか「本当はこのお気に入りの子をリーダーにして使いたいのだけどまだ育ちきってないし微妙かな」とかそういうことが発生します*6
更に長期間ログインしていないとフレンドがごっそりいなくなっていたとかもままある話で、パズドラとほぼ同等のフレンドシステムであるディバゲではずいぶんと苦労しました。
無課金なので強いキャラ持ってないからフレンド申請してもなかなか承認されないし、冒険者を見ても最新のレアキャラをバンバン使ってて、それはいいのだけど属性が噛み合わないとか、
「たまに起動してちょっとやりたい」って時に「あーフレンドいないや……やめよ」ってなってそのままどんどん遠ざかっていってしまいました。

ずいぶん前置きが長くなってしまいましたが、ロードラでは冒険者でもリーダースキル(ロードラではパーティスキルといいます)が発動できます。
それどころか自分のリーダー以外のユニット、つまりパーティの全てのユニットがスキルを発動できます。ぱねえ。
なので「あ〜ダンジョン行きたいな〜あーでもフレンドにあのユニットがいないな……冒険者探そ〜」ってことができます。「覚醒かつレベルMAXの子を探そう」とかもできます。ランダムで引き当てるだけの時間と根気があればですが。
「あ〜ダメージ半減キャラほしいー探そうー」も「あ〜○○が必要なのにフレンド全部使いきっちゃった〜探そう〜」もいけます。便利です。

ソウルについて

後述って言っておきながら危うく忘れるところでした。ソウルについて。
・移動時に1消費
・攻撃時に0以上消費
は先程述べた通りですが、スキルを使うためにも消費します。
スキルはパズドラのようなターン制ではなく、一定のソウルを消費することで使えます。どちらかというとパズドラZのシステムに近いです。

そしてそれだけではなく、物語上大きな意味を持ちます。
それって具体的に何よ〜〜〜〜〜〜〜って話は、是非プレイして確認してほしいのですが(意訳:私もまだ全てを把握しきれていないのでこの辺りは正直解説できる自信がない)
魂を消費して戦う、とか、世界の魂の総量、とか、ウワーッ、つまりキンカクテンプルとは0101010101とか突然ニンジャの話が混01010101なんでもないです。
なんかたぶんきっと「ウワアアアア」ってなるようなでかい話が待ってるのだろうな〜〜〜〜〜〜と思いながらちまちま進めています。


長くなりましたがキャラかわいいし無課金でもじゅうぶん遊べる(あ、パズドラほどじゃぶじゃぶ石配らないのでそこだけは注意)のでロードラやろうぜ!
というお話でした。そろそろ眠くなってきたのでここまで。

*1:カタカナ表記だとドラゴンなのに英語表記だとsつくのでたまに混乱します

*2:TOZ使えばとかそういう話は初心者記事なので割愛します

*3:パズドラでいうデビルくらいの子

*4:正確にはありますが、ユニットのレベルや進化段階に応じて自動で上がります

*5:ネフティリア3体連続で引いた人が何か言ってますね

*6:後者は最近のアプデによりそれほど気にしなくてもよくなりましたが