頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


Python、datetimeの落とし穴

Pythonで日時を扱いたかったんでdatetimeなるものをいじってたんだけどさ。

date1 = datetime.date(2017, 8, 3)
print("date1 = "+date1.isoformat()) # date1 = 2017-08-03

↑これはええねん。期待通りね。

ところがここに至る前に
date1 = datetime.date(2017, 08, 03)
みたいな記述をしてたんよ。そしたら

Unhandled Python exception
Program ended with exit code: 6

とか言って落ちるんよ。これが出るとどこがおかしいのか調べるのに難儀するんだよな。
ホント厳しいのう、Pythonさんは、、、

あ、もしかしてと思って確認したら整数型に
a = 01
としただけで落ちるやん。datetimeというよりPythonの仕様なのね、、、



memo
Python 3.5.2 :: Anaconda 4.1.1 (x86_64)



PyQt5でサブウインドウ内のボタンが押せない

PythonでGUI欲しくてPyQt5をインストールしてみた
↑PyQt5をいじってるんだけど、、、
サブウィンドウの扱いってのがもう一つよくわからん。
メインのウィンドウを作るように作ってもダメっぽく、QDialogってので作成しないといけないらしい。

PyQt5メインウインドウ
↑メインのメニューバーみたいなのを作って、そこをクリックすると、、、

PyQt5サブウインドウ
↑サブウィンドウが表示された!ここまではええねん。

このサブウィンドウ内にボタンを追加してみたんだけど、これが有効にならない。
なんか色まで違うけど、それくらいはええわ。
いくらクリックしても関数がコールされないのはどういうことや?
調べてもさっぱりわからなかったので、、、諦めた!
サブウィンドウではボタンは使わないことにする。まあ自分用だからな。


(参考)
PyQt5とPythonでサブウィンドウを出してみる - Qiita


Nintendo SwitchでNAT超えができなかった理由

めでたくNintendo Switchを手にいれてARMSを楽しんでるんだけど、パーティマッチをやってみようとしたけど、いくらやっても相手が見つからない。あー、ちなみに俺はまだ人様と戦えるレベルまで行ってないです、はい。
詳しくみるとどうもインターネットの接続に問題があるとか?
へ?ストアにだって接続できてるし、アカウントのログインだってできてるやん?

インターネットへの接続をチェックしてみると、、、

Switchのネット接続テスト1

↑NATタイプがDってなってるやん?これはまずいらしい。

【Switch】エラーコード「2618-0516」が表示されました。どうしたらいいですか?

で、ネットで情報を漁ってSwitchのIPアドレス固定したり、ルータの設定をいじったり奮闘したんだけどいくらやってもNATタイプはD。

対戦するのに今までiPhoneでも何か特別な設定したとかないし、3DSではネットで誰かとモンハンできるのに。Switchの画面見てもグローバルIPアドレス書いてるし。だからルーターかSwitchの設定でなんとかなるんだろうと思ってたんだが、、、

いくらやってもダメなので、Nintendoのヘルプに真っ先に書いてる「契約してる回線の確認」をしたら、ウチにはグローバルIPアドレスは与えられてないことが判明。
ウチはマンションなので、マンションにグローバルIPアドレスがあって、そこからプライベートIPアドレスってのが各戸に与えられるとかなんとか。
そういうことかよ。

それで解決策はというと現在使ってる回線にグローバルIPをもらえるオプション(もちろん有料)があるので、それを申し込んでみた。
うちで使ってる無線LANルータはバッファローのWHR-1166DHP2 でファームウエアのバージョンは2.91。
ここでそれ用の設定画面(192.168.11.1な、取説にあるよね)に入り、グローバルIPアドレス申し込みでもらえたPPPoE接続用のID、パスワードなどを設定。
バッファロールータのPPPoE 接続設定説明
↑こちらのブログが参考になりました。

ところがうちの場合「IPアドレス取得方法」が「インターネット@スタートを行う」と表示されるだけで選択することができなかったんだわ。
バッファロー本家のヘルプを確認したら、ルーター本体背面のスイッチを切り替えるべし、とあったのでAUTOになってたのをROUTERに変えたら

ルーター設定画面

↑このような「IPアドレス取得方法」を選択できる画面が現れた。ここを「PPPoEクライアント機能を使用する」に設定。
Switch本体は特別な(IPアドレス固定するとか)設定はしてない。

その結果、、、

Switchのネット接続テスト2

↑輝かしいぜ、NATタイプ A!!
早速ARMSやってみる。
お〜お〜おお〜 お〜お〜おお〜 お〜お〜お〜〜!(ARMSのテーマね)
するとめでたくパーティマッチ繋がった!!けどやっぱり下手なのでカモられてばかりだけど。
これでスプラトゥーン2も楽しみだ!


SwitchのARMSはJoy-Con一台で遊べるのか?

購入前に色々調べたんだけど、ARMSってJoy-Conを追加購入せずに家族で対戦したり出来んのかな?ってのがよくわからなかった。
ほら、いろんなサイト見ても大抵は左右の手にJoy-Conを一つずつ手にして(「いいね持ち」と言うらしいよ)パンチ!とかしてるじゃない?こんな感じでさ↓

ARMS対戦

ってことは家族で対戦しようとするとJoy-Conセットを購入せんとあかんの?と思っていたんだけど、、、

いざARMSを買って遊んでみたところ、、、できるじゃないか!

「Joy-Con横持ち」ってのがあって、1台で移動やパンチなど全部の操作ができる。これだとデフォで2台あるから家族や友達などと一緒に対戦や協力して遊べる。

操作方法 - ARMS(アームズ) 攻略
↑持ち方についてはこの辺りに詳しく載ってる。

ただやっぱり「いいね持ち」が楽しいし、「横持ち」だと誤操作で何度も一時停止やスクショ撮影とか押しちゃったりしてしまう。やっぱりJoy-Conセット欲しい!ってなっちゃう。まさに任天堂の思う壺だよ。

ともかく息子と対戦してなかなか盛り上がったよ!


あと、一番最初に戸惑ったのがストラップを付けずにソフトを起動して進めていったせいか、「横持ち」を前提にチュートリアルが進んでわけわからず、何かさせるのにいろいろ試すだけという状態になった(こちらは「いいね持ち」で構えていたわけで)。両手でやるなら最初からストラップつけとかないとダメみたい。



Nintendo Switch販売ページをスクレイピング?

なんとかNintendo Switch本体を購入しようとお店に電話で在庫確認したりマイニンテンドーストアなどをチェックしてたんだけど、なかなか買えない。
この前はマイニンテンドーストアでカートに入れることはできたけど支払いまでに完売してしまったらしくダメだった。もう少し気付くのが早ければ、、、待てよ、webサイトのチェックならスクレイピングでできるんじゃね?と思って調べてみた。

ターゲットは本家My Nintendo Storeとトイザらスオンラインストア。

トイザらスオンラインストア

↑トイザらスだとこんな風に”入荷予定あり”と表記があるのでついつい期待しちゃうんだよね。

で、スクレイピングできるのかな?とhtmlの中身を見てみた。

マイニンテンドーストア

↑My Nintendo Store → 何故かSOLD OUTの文字はない(サイトとしては画像でもなくテキストなのにね、俺には理解できん)。検出する文字列が見つからないんじゃどうしようもないのであきらめた。

トイザらスのソース

↑トイザらス オンラインストア → 在庫に関していくつかの文字列を動的に表示を切り替えてるみたいで、単に「在庫あり」もしくは「在庫わずか」の文字列を探したら常に検出しちゃってダメだった。

ちなみに PythonのBeautiful Soup でやってた。
Python Webスクレイピング 実践入門 - Qiita
↑この辺りがとても参考になった。一定時間経過後に処理するとかもあるし。

動的なのが必要なのか?ということで Selenium なるものを使おうとChromedriverもインストール、してやってみたけど結果はダメだった。

ところがこのSeleniumってのはスクショも撮れるんだわ。さすがにスクショなら該当するSOLD OUTとか捕まえられるんじゃね?と思ってまずはスクショを撮れるか試してみた。

Seleniumによるスクショ1
Seleniumによるスクショ2

↑指定のとこまでスクロールさせてスクショ撮影、保存。いけるやん、Seleniumやるやん!
ここに「SOLD OUT」や「在庫なし」がなければPythonからMacへ通知(通知関連は↓この辺りを参考に前にやったな)。
Macの通知センターにPythonから通知する - Qiita

問題はスクショ画像から在庫有無を判断する方法なんだけど、、、OpenCVでなんか使えそうなのあんのかな?日本語OCRとかで評価?せっかくなので機械学習で該当文字画像の有無を検出するNNを作るか?データセットはどんなのが必要になるんかな?とか色々考えてたところ、、、



へへへへへ!買えちゃったんです!日課の電話問い合わせをしたら「在庫ありますよ」と言われて大急ぎで自転車飛ばしてトイザらスへ。本命のネオンブルー/ネオンレッドは無くなってた(電話時には1台ありと言ってたが)けどグレーをゲット。

そんなわけで、もうスクレイピングやらんですみました。




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad