ピカチュウ大量発生チュウに行ってきた
毎年恒例で横浜のみなとみらいで行われているピカチュウ大量発生チュウに行ってきました。
去年はポケモンGOのイベントも含まれていたのですが、今年はポケモンGOのイベントは無かったです。
ピカチュウの他にイーブイが大量発生するらしいので明日行ってこようかと思います。
今日は桜木町駅とランドマークタワー、クイーンズタワー、マークイズあたりを歩いてきました。
桜木町駅に付いたらこんな感じでした。
あと、大きなピカチュウのバルーンが10匹位置いてありましたね。バルーンは触らないでくださいと張り紙が貼ってあるものの、訪日観光客は日本語が読めないので抱きつきながら写真撮影しては警備の人に止められるみたいな光景をよく見ました。
ランドマークタワーに向かうための動く歩道のところにはいくつもピカチュウの旗がぶら下がっていました。
ランドマークタワーに入るといつものたくさんピカチュウが入ったやつがありました。
マークイズにはイーブイがメインの展示がされていました。
ランドマークタワーはこんな感じです。
大量発生して更新している姿はとても可愛らしかったです。
ピカチュウが行進しているところは動画で撮っていたのですが、動画のアップロードする場所がなかったのでとりあえず写真を切り取ってみました。子供を片手で抱きかかえた状態でもう片手で動画を撮っていたので尋常じゃないくらい汗をかきました。数年前に熱中症になりかけたのですが、今年は熱中症にならなくてよかったです。
明日は赤レンガ方面のイベントを見に行こうと思います。
それではまた。
Google Apps ScriptのCLIツール『clasp』を使ってみた
Google Apps Scriptをローカル環境で管理できるものがあるようですね。
claspとは
Command Line Interface using clasp | Apps Script | Google Developers
claspは、Apps Scriptプラットフォームとは別のオープンソースツールで、Apps Scriptエディタではなく、端末からApps Scriptプロジェクトを開発および管理することができます。
ローカル環境でGoogle Apps Scriptを触れるのは便利そうなので試してみます。
実際に使ってみる
インストール
$ npm install @google/clasp -g
Login
これを実行するとブラウザにて認証認可画面が表示されるようでした。
$ clasp login
許可をすると利用できるようになるようです。
新規Apps Script作成
新規で作成するとエラーになりました。
$ clasp create clasp_test Error: Permission denied. Enable the Apps Script API: https://script.google.com/home/usersettings
https://script.google.com/home/usersettings を表示すると設定画面に遷移します。
設定画面では、Google Apps Script APIがオフになっているようなのでオンに変更して再度コマンドを実行します。
$ clasp create clasp_test Created new script: https://script.google.com/d/XXXXXX-xxxxxxxxxxxx_XXXXXXXXXXXXXXXXXXXXXX/edit Cloned 1 file. └─ appsscript.json
無事作成できたようです。(XXXXXがたくさん書いている部分はスクリプトIDになっています。)
ファイル作成と反映
とりあえずhello.jsというファイルを作成してみます。
function hello() { Logger.log('Hello World!') }
作成後に、以下を実行するとコードが反映されるようでした。
$ clasp push
deployをするとバージョンが付与されるようでした。
$ clasp versions No deployed versions of script. $ clasp deploy Created version 1. - XXXXXXXXXX_1zzzxVzCCuSEFwPUr0rRVBwUcoYIR4OqIiIzS79EtE3Z4Ssqme4-EabkXjS7WfX @1. ------------------------------------------------------------ $ clasp versions ~ 1 Version ~ 1 - (no description)
既に存在するプロジェクトをcloneする
既に作成しているGoogle Apps Scriptをcloneすることが出来るようです。
$ clasp clone <scriptId>
cloneした後にブラウザ側で修正してしまった場合とかはpullすると良さそうでした。
$ clasp pull
まとめ
軽く使ってみたくらいですがだいぶ便利に使えそうな感じがしました。開発環境で作業できるということなので、gitで管理するのもだいぶ楽になりそうでした。慣れた環境で作成できるのはストレスが減るので本当にいいですね。
ZOZOSUITが届いた
ちょっと前ですが、ZOZOSUITが届きました。だいぶ待ちましたが楽しみにしていました。
開封するとこんな感じの物が入っていました。これを着た後に、スマートフォンのスタンドを使ってZOZOTOWNのアプリから体を読み込むようでした。
開けるとこんな感じの物が入っていました。スーツは上半身と下半身が分かれていました。
スーツを着た後にアプリに言われるがまま時計回りで体の写真を撮られ、結果が出た時は感心しました。どうやら左腕がちょっと長いようですね。
後ろ向いた時はこんな形でした。後ろ姿の時は長さは表示されないようですね。
測ったのでとりあえずTシャツとジーンズを購入。Tシャツは1200円で、ジーンズは3800円でした。
身長が190センチあるので何かと服を買うのに困っていたのですが、自分のサイズが分かりつつ、自分に合うサイズの服を作ってくれるのは良いですね。
あと、商品を検索している時も測ったサイズで自分の合うサイズはこのサイズというのを出してくれるのはいい感じでした。服のバリエーションが増えていくといいですね。
数ヶ月経つとお腹周りとかサイズが変わってくると思うので定期的にサイズを測ってみようかなとも思いました。
また秋とか冬になったら測ってみて、服を何か買ってみようかと思います。
どうでもいいけど、zozoさんはまだhttpなのですね。
pipenvで作った環境をBitbucketのPipelinesでテストする
会社ではBitbucketを使ってgit管理しています。BitbucktにはPipelinesというCIツールがあります。
最近は主にpythonで開発していて、パッケージ管理をpipenvを使うようになったのですが、Bitbucketでテストする時にはbitbucket-pipelines.ymlに以下のような設定をすると良いようでした。
# This is a sample build configuration for Python. # Check our guides at https://confluence.atlassian.com/x/x4UWN for more examples. # Only use spaces to indent your .yml configuration. # ----- # You can specify a custom docker image from Docker Hub as your build environment. image: python:3.6.3 pipelines: default: - step: caches: - pip script: # Modify the commands below to build your repository. - pip install pipenv --upgrade - pipenv install --dev --deploy --system - python -m unittest
とりあえずこれで気兼ねなくテストを書けるので捗りそうですね。
Node.jsでYahoo!ショッピングの注文APIを叩いてみる
概要
業務でYahoo!ショッピングのAPIを利用しているのですが、注文APIは少し苦戦したのでメモを残します。 とりあえず立たけるようになったので良かった・・
ちなみに、マニュアルは以下のページにあります。
ショッピング:注文に関するAPI - Yahoo!デベロッパーネットワーク
なお、アクセストークンについては既に取れている前提で記載しています。
注文ステータス別件数参照
注文ステータス別の件数を取得するAPIです。こちらは簡単でした。
サンプル
const request = require('request') const accessToken = '<ACCESS_TOKEN>' const sellerId = 'snbx-xxxxx' const url = 'https://test.circus.shopping.yahooapis.jp/ShoppingWebService/V1/orderCount' const options = { method: 'GET', url: url, headers: { 'Authorization': 'Bearer ' + accessToken }, qs: { seller_id: sellerId, }, ignore_errors: true } request.get(options, (err, res, body) => { if (!err && res.statusCode === 200) { console.log(body) } else { console.log('Error!') console.log(res) } })
レスポンス
<?xml version="1.0" encoding="UTF-8" ?> <ResultSet totalResultsAvailable="1" totalResultsReturned="1" firstResultPosition="1"> <Result> <Status>OK</Status> <Count> <NewOrder>1</NewOrder> <NewReserve>0</NewReserve> <WaitPayment>0</WaitPayment> <WaitShipping>0</WaitShipping> <Shipping>0</Shipping> <Reserve>0</Reserve> <Holding>0</Holding> <WaitDone>0</WaitDone> <Suspect>0</Suspect> <SettleError>0</SettleError> <Refund>0</Refund> <AutoDone>1</AutoDone> <AutoWorking>0</AutoWorking> <Release>0</Release> <NoPayNumber>0</NoPayNumber> <StoreStatus1>0</StoreStatus1> <StoreStatus2>0</StoreStatus2> <StoreStatus3>0</StoreStatus3> <StoreStatus4>0</StoreStatus4> <StoreStatus5>0</StoreStatus5> <StoreStatus6>0</StoreStatus6> <StoreStatus7>0</StoreStatus7> <StoreStatus8>0</StoreStatus8> <StoreStatus9>0</StoreStatus9> <StoreStatus10>0</StoreStatus10> </Count> </Result> </ResultSet>
注文検索API
注文検索APIの方はちょっと苦労したのですが、何とか値が取れるようになったので良かったです。
サンプル
セラーIDのsnbx-xxxxxx
は任意の値を入れてください。
const request = require('request') const accessToken = '<ACCESS_TOKEN>' const sellerId = 'snbx-xxxxxx' const url = 'https://test.circus.shopping.yahooapis.jp/ShoppingWebService/V1/orderList' const xml = ` <Req> <SellerId>${sellerId}</SellerId> <Search> <Condition> <OrderTimeFrom>20180611000000</OrderTimeFrom> </Condition> <Field>OrderId,Version,OrderStatus</Field> </Search> </Req>` const options = { method: 'POST', url: url, headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Bearer ' + accessToken }, body: xml, ignore_errors: true } request(options, (err, res, body) => { if (!err && res.statusCode === 200) { console.log(body) } else { console.log('Error!') console.log(err) console.log(res) } })
レスポンス
<?xml version="1.0" encoding="UTF-8" ?> <Result> <Status>OK</Status> <Search> <TotalCount>2</TotalCount> <OrderInfo> <OrderId>snbx-xxxxx-10000001</OrderId> <Version>1</Version> <OrderStatus>5</OrderStatus> <Index>1</Index> </OrderInfo> <OrderInfo> <OrderId>snbx-xxxxx-10000002</OrderId> <Version>1</Version> <OrderStatus>5</OrderStatus> <Index>2</Index> </OrderInfo> </Search> </Result>