2018年2月25日日曜日

Steam Web API で Dota2 の対戦履歴を表示する

Steam Web API の続きです。
自分の Dota2 の対戦履歴を取得するところまでやってみました。

使う API は以下の2つ。
あと、画像を取得するのに CDN を利用します。
  • http://cdn.dota2.com/apps/dota2/images/heroes/<name>_<suffix>
CDN の使い方はこちらに書いてありますが、1例を。
http://cdn.dota2.com/apps/dota2/images/heroes/pangolier_lg.png

これらを組み合わせて、対戦履歴を表示してみました。
コードはこんな感じに。


 // https://gist.github.com/almirsarajcic/4664387
 function convert_steamid_64bit_to_32bit($id)
 {
  $result = substr($id, 3) - 61197960265728;
  return (string) $result;
 }
 function convert_steamid_32bit_to_64bit($id)
 {
  $result = '765'.($id + 61197960265728);
  return (string) $result;
 }

 $key = "YOUR_API_KEY"; // Set Your API key here.
 $steamid = 76561197961028586; // Set target's steam id here.
 echo "<h2>SteamID : {$steamid}</h2>";
 $accountid = convert_steamid_64bit_to_32bit($steamid);
 echo "<h2>accountid : {$accountid}</h2>";

 $curl = curl_init();
 
 // ヒーローリストを取得する
 curl_setopt($curl, CURLOPT_URL, "https://api.steampowered.com/IEconDOTA2_570/GetHeroes/v1?key={$key}");
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 $json = curl_exec($curl);
 $response = json_decode($json);
 $heroes = [];
 foreach ($response->result->heroes as $hero) {
  $heroes[$hero->id] = str_replace("npc_dota_hero_", "", $hero->name);
 }

 // 対戦履歴を取得する
 curl_setopt($curl, CURLOPT_URL, "https://api.steampowered.com/IDOTA2Match_570/GetMatchHistory/v1?key={$key}&account_id={$accountid}");
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 $json = curl_exec($curl);
 $response = json_decode($json);

 curl_close($curl);

 // 対戦履歴一覧を表示する
 foreach ($response->result->matches as $match) {
  $start_time = new DateTime('@' . $match->start_time);
  foreach ($match->players as $player) {
   if ($player->account_id == $accountid) {
    $hero_name = $heroes[$player->hero_id];
    $img = "<img src='http://cdn.dota2.com/apps/dota2/images/heroes/{$hero_name}_sb.png'>";
   }
  }

  echo "
  <div>
  {$start_time->format('Y/m/d H:i:s')}
  {$img}
  </div>
  ";
 }
https://github.com/jtanaka/test_steam_web_api

実行するとこんな感じに。



無事表示することができました。
ここまで確認できればサービス作れますね。

参考

https://wiki.teamfortress.com/wiki/WebAPI#Dota_2

2018年2月24日土曜日

Windows で高速に Git clone する方法

Windows 環境で開発しているとき、 どうやって Git clone していますか。

実はコマンドは、エクスプローラーのアドレスバーに直接打ち込めます。








Powershell を開くときなども、ここに "powershell" と打ち込むとディレクトリを移動しなくて良いので楽です。

2018年2月20日火曜日

Steam Web API で求められる account_id とは

Steam Web API の一覧をみていると、必須 paramter に account_id というのが結構でてきます。



これは Steam ID でも API KEY でもないのですが、パッと探しても情報がでてきずらいのでメモしておきます。

account_id とは

「32-bit account ID」 とか 「STEAMID32」とか呼ばれていますが、要するに
  • STEAM ID が 64-bit の ID
  • STEAM ID の 32-bit 版 が account_id
ということです。

生成方法

で、その STEAMID64 と STEAM32 を相互変換する式があって、その方法がこちら。
  • STEAMID64 - 76561197960265728 = STEAMID32
  • STEAMID32 + 76561197960265728 = STEAMID64
  • OR
  • STEAMID32 = The right-most 32-bits of STEAMID64
  • STEAMID64 = concatenate("00000001000100000000000000000001", STEAMID32);
出典: https://dev.dota2.com/showthread.php?t=58317
上記は、64-bit の数値を扱える場合。
そうでない場合は、もうちょっと頑張る必要があるとのこと(試していません)。
define("STEAM_ID_UPPER_32_BITS", "00000001000100000000000000000001");
    // gets the lower 32-bits of a 64-bit steam id
    function GET_32_BIT ($ID_64) {
        $upper = gmp_mul( bindec(STEAM_ID_UPPER_32_BITS) , "4294967296" );
        return gmp_strval(gmp_sub($ID_64,$upper));
    }

    // creates a 64-bit steam id from the lower 32-bits
    function MAKE_64_BIT ( $ID_32, $hi = false ) {
        if ($hi === false) {
            $hi = bindec(STEAM_ID_UPPER_32_BITS);
        }

        // workaround signed/unsigned braindamage on x32
        $hi = sprintf ( "%u", $hi );
        $ID_32 = sprintf ( "%u", $ID_32 );

        return gmp_strval ( gmp_add ( gmp_mul ( $hi, "4294967296" ), $ID_32 ) );      
    }  
※出典: https://dev.dota2.com/showthread.php?t=47115&page=27&p=312817&viewfull=1#post312817

GitHub に相互変換のソースもありました。
https://gist.github.com/almirsarajcic/4664387

以上。

2018年2月19日月曜日

Steam に Web API があったので試してみた

Dota 2 をやっていると、何か自分の対戦履歴が自動で反映されている Web サイトがあったりするわけです(超便利)。
https://www.dotabuff.com

気になったので調べてみたら、やはり Web API があるようで。
https://wiki.teamfortress.com/wiki/WebAPI#Dota_2

試してみました。

API Key を取得する

ここで、API Key を取得します。

取得するとキーの所にキーが表示されます。
ドメイン名は、公開予定も無いのでとりあえず適当で大丈夫でした。

自分のプロフィールを取得してみる

手始めに、プロフィールを取得してみます。

        $key = "YOUR_KEY";
        $steamid = "76561197961028586";

        $curl = curl_init("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/?key={$key}&steamids={$steamid}");
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $response = curl_exec($curl);

        var_dump($response);
        curl_close($curl);
こんな感じに出力されます。

{
  "response": {
    "players": [
      {
        "steamid": "76561197961028586",
        "communityvisibilitystate": 3,
        "profilestate": 1,
        "personaname": "TANAKA",
        "lastlogoff": 1518968667,
        "profileurl": "http://steamcommunity.com/id/jumtana/",
        "avatar": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/bd/bd0af6bb099845e0c93d3bba467cdd96e743ce51.jpg",
        "avatarmedium": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/bd/bd0af6bb099845e0c93d3bba467cdd96e743ce51_medium.jpg",
        "avatarfull": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/bd/bd0af6bb099845e0c93d3bba467cdd96e743ce51_full.jpg",
        "personastate": 1,
        "realname": "Jumpei Tanaka",
        "primaryclanid": "103582791429548415",
        "timecreated": 1063939457,
        "personastateflags": 0,
        "loccountrycode": "JP",
        "locstatecode": "40",
        "loccityid": 26138
      }
    ]
  }
}
取れてる取れてる。
単純に上記だけであれば、GET なのでブラウザでも見れます。

次は対戦履歴でも取得してみます。

2014年12月17日水曜日

Surface Pro 2 でマルチディスプレイを試してみました

自宅のデスクトップ PC が絶賛死亡中なので、Surface Pro 2 を自宅でも使っていたのですが流石に家では大きいディスプレイで見たくなってきました。

Surface Pro 2 は Mini Display Port、自宅のディスプレイは HDMI ということでこちらのケーブル ¥750 を購入。

その他もっと安いケーブルからお高いケーブルまで色々とありますが、レビューコメントから察するにあまりに安いものは初期不良&故障率が高そうだったので、ちゃんと動きそうでお値段控えめのこちらを選択しました。

早速接続。
心配だった初期不良もなく、快適に動いています。
ただ、画面が大きいと Clear Type Font に対応しているか否かによるテキストの鮮明さが露骨です。ケーブルは関係ありませんが。

スクリーンショット (50)


あと地味に Windows 8 だとディスプレイ切り替えの UI が便利なのがいいですね。

スクリーンショット (50)

マシンパワーも申し分ないので、リアルにデスクトップ PC 不要の時代を感じました…

2014年12月9日火曜日

Visual Studio Online のライセンス設定方法

Azure に登録して、Visual Studio Online のアカウントも作成して、さぁ使ってみよう!
…と思ったら、有効な MSDN Subscription を持っているアカウントなのに、チャット等の有料機能が有効になっていませんでした。

調べてみたところ、VSO のユーザ毎にライセンス設定があり「Basic」になっていたのでこれを変更したらいけました。

Licence が Basic になっているので、Edit > Eligible MSDN Subscriber に変更。save image

使えるようになりました!
save image

Azure と言い、無駄なところで UI に悩まされます。。

2014年11月23日日曜日

Maker Faire Tokyo 2014 に行ってきました。

11/13(土)にMaker Faire Tokyo 2014 に行ってきました。
当日にFacebookに流れてきた情報を見てすぐ突撃したので前情報もなかったのですが、電子工作系のDIYに関連したイベントのようです。
最近IT業界では猫も杓子もIoTと言っているので、来年再来年とどんどん盛り上がっていくのではないでしょうか。

とはいえ、自分はソフトウェア開発は長いですが電子工作はやったことがないので、初めて知ることばかり。同じ境遇の方もいると思うので、自分が興味持ったところを簡単にまとめておきます。

IoT 開発プラットフォーム(マイコンボード)

入り口近い Intel と NVIDIA のブースが目立っていました。
ですが、これらの位置づけを理解するには今流行の Raspberry Pi と Arduino について知る必要があるようです。

Raspberry Pi

最近流行の Raspberry Pi ですが、まだまだまとまった情報がありません。。
が、HDMIやUSBポートがついていて小型PCの様であり、一番とっつき安いのかもしれません。

>現在、25米ドルの「Model A」と35米ドルの「Model B」「Model B+」の3つのバージョンがリリースされている。
wikipedia より http://ja.wikipedia.org/wiki/Raspberry_Pi

Model A : http://www.amazon.co.jp/Raspberry-Pi-Type-A-256MB/dp/B00CYA6UKI/ref=sr_1_sc_1?s=computers&ie=UTF8&qid=1416738069&sr=1-1-spell&keywords=raspberry+pie+type+a
Model B : http://www.amazon.co.jp/Raspberry-Pi-Type-B-512MB/dp/B00CBWMXVE
Model B+ : http://www.amazon.co.jp/gp/product/B00LT4BOK6/ref=pd_lpo_sbs_dp_ss_1?pf_rd_p=187205609&pf_rd_s=lpo-top-stripe&pf_rd_t=201&pf_rd_i=B00CBWMXVE&pf_rd_m=AN1VRQENFRJN5&pf_rd_r=1G9560YEP7JGJ6FPYG5E

Arduino

Raspberry Pi が全部入り、対して Arduino は目的に特化した製品があるイメージでしょうか。
種類がありすぎてよくわかりませんが・・・

Arduinoシリーズ
http://ideahack.me/article/134

Arduino
http://www.arduino.cc/

ArduinoとRaspberry Piの違いとは

Arduinoはハードウェア開発寄り、Raspberry Pi はソフトウェア開発寄りということのようです。ずばり ArduinoとRaspberry Piの違いとは? という記事がこちらにあります。
http://wired.jp/2014/01/07/the-difference-between-arduino-and-raspberry-pi/

Intel

Edison (10/25から国内発売)
http://www.intel.co.jp/content/www/jp/ja/do-it-yourself/edison.html

Galileo 第2世代 (Edisonの前)
http://www.intel.co.jp/content/www/jp/ja/do-it-yourself/galileo-maker-quark-board.html

NVIDIA

Jetson TK1
http://www.nvidia.co.jp/object/jetson-tk1-embedded-dev-kit-jp.html
購入出来る場所
http://www.gdep.jp/product/view/79
http://www.oliospec.com/item_detail/itemCode,Jetson-TK1-KIT/

 

その他印象に残ったプロダクトなど

handiii

handiii は筋電義手です。
筋電義手というのは、手を動かそうとすると腕の筋肉が動く仕組を利用して、筋肉の動きを電気で検知して動かす義手。

まず見た目がえらいカッコイイので惹きつけるものがあるのですが、でもお高いんでしょう…?という質問にもNOで答えてくれます。100万以上する既存の筋電義手よりも安くてかっこ良くて誰でも手に入れられる、時計で言えばSWATCHのような存在を目指しているとのことでした。

handiii のクラウドファンディング
http://kibi-dango.jp/search.php?type=action&run=true&items_id_PAL%5B%5D=match+comp&items_id=I0000063&stid=14798268005

開発チームexiii
http://www.exiii.jp/

Picalico

LEDの点滅をスマホで読み取って、文字やURLを表示できるシステム。
液晶を持たない家電(掃除機や洗濯機)と組み合わせて使うとこんなこともできます。

液晶などのリッチなUIを持たなくてもユーザに情報を伝える手段として面白いと思いました。 

ふうせん宇宙撮影

風船を使って宇宙撮影をするノウハウを公開しています。
材料費も1万円程度で出来るとのことで、自分もやってみようかな!?という気になりました。
http://fusenucyu.com/

 

情報源

IoT関連の情報源として、こんなサイトを知ることが出来ました。

MAKE

今回のイベントの主催者でしょうか?
http://makezine.jp/

fabcross

個人のものづくりを応援するメディアだそうです。
https://fabcross.jp/

以上。