自分基準

自分の思ったことを気ままにメモ代わりに書いていこうかと

普段運動しない自分がジョギングを初めたが3日で挫折した

前回の記事でジョギングをしてみた感想を書いたが

www.jibunkijyun.net

その後も、やりたいことリストの中に「1週間連続で5Km走る」と入れたので続けていたのだがあろうことか、文字通り3日坊主で終わってしまったのでその反省と原因を備忘録を兼ねてメモ。

 三日坊主になった理由

 三日坊主になった理由①:仕事の後にするのは辛い

5kmを走るということだがこれ自体はそこまで辛い行為ではない。 むしろ30分以上かけているので負荷としては小さい方だとは思う。(それでも私は本気で走っており、手は一切抜いていないのだが…)

でも、それは休みの日や定時に近い時間で帰れた日に限る
残業をしたり、職場の人たちと夕飯を食べに行った後に「よーし、今日も走るか!!」なんて気力なんて一切わかず「疲れた…布団に入りたい…」としか思えない。
2次会に行った日になんか特に…

 三日坊主になった理由②:疲労が回復しない

先にも書いたが5Kmを30~40分はキツイ内容ではない、でもそれは通常の人であって普段全くと言っていい程、運動をしない自分にはそれなりの負荷がかかっている。 それでも倒れるほどでもないし、「もう二度とやるかこんなこと」と思う程の辛さではない。

だがそれは、日を追うごとに(たった3日だが)辛さが増えてきた。
昔であれば翌日になればほとんど疲労も無く元気に回復しているのだが、今では朝起きたときに足が痛いまでとは言わないが明らかに疲れている。

そして夜に走ると攣りそうになり疲労が回復していないことがヒシヒシと感じ、続けていけばこれも無くなると思いつつも「もうやめよーぜ」と悪魔の囁きも聞こえてくる。

 三日坊主になった理由③:雨が降った

雨が降ったからお休みである。どこのハメハメハ大王だろうか。

そこまで土砂降りの雨では無かった。時間をずらせば晴れていたときもあった。それでもいつも走っている時間に雨が降ったからという理由で止めてしまった。

ただ単にやめる理由が欲しかっただけ。

 三日坊主になった理由④:風邪をひいた

これもただの理由付け。熱が出たわけでもないし然程辛い訳でもない。 ただ単にたまに咳き込み喉に違和感を感じるだけ。

それでも走りたくないから、仕事に支障が出ると職場の人達に迷惑がかかるからと自分で解釈してお休みにする。

 三日坊主になった理由:まとめ

ただ単に自分のやる気が無くなってきただけである。 習慣づけられるようになれば走らなければという気持ちが湧いてくるのかもしれないが、現在の自分ではまだ習慣づけられていないし続けようとするためのモチベーションも持っていない。

何か報酬のためにやることでは無いのでどうにかして自分を奮い立たせなければならないと思う。

 三日坊主を改善してみる案

 三日坊主を改善してみる案①:報酬を決める

運動は自分のためなので何か報酬を貰えるわけではない(健康になるということは置いておいて)ので、何かしら自分で達成した際の報酬を決めたほうが良いのかも知れない。

 三日坊主を改善してみる案②:先に投資をする

なんでもいいので走るのに使えるものを先に買ってしまうのも効果的かもしれない。 特に安物ではなく微妙に高いものを先に買うことで「せっかくこれ買ったんだしなぁ」という気持ちが働くかもしれない。

とりあえず思いついた対策はこの2つだけなのでこれをモチベーションになるように変えていこうと思う。

ジョギングをやってみて思ったこと

やりたいことリストに「痩せる」と「マッチョになる」と入れたので運動がてらジョギングをしてみたのだがその際に思ったことがいくつかあったのでその記録。

 走った距離

走った距離は僅かではあるが5Km程度にした。 いきなり長距離を走っても辛くておそらく続かなくなってしまうと思うので、今日は短めにした。

f:id:nisiki_satika:20160925214801p:plain

約5Kmを30分かけて走っているので、画像にもある通り1Kmあたり約6分半である。 これはとても遅いと思うので今後はこの記録を最低として短くしていこうと思う。

 思ったこと

 ①スマホが邪魔くさい

スマホがとてつもなく邪魔くさかった。 走るので服装がジャージになるのでポケットに入れておくと落としてしまいそうだし、ポケットの中で大きく揺れ動くので手に持って走らざる負えなかった。

 ②信号がとてもうざい

これはルート選びが悪かったと思う。 走るルートはここを利用して予め調べたのだが、

www.mapion.co.jp

特に気にせず家の周りを適当に決めたところ何回か大通りに出ることがあった。 そのため信号機が設置されていることが多く何回か止まらざる負えなかった。 酷いときには赤なので止まる→青で再スタート→次の信号で再度停まるを繰り返すハメになったところもある。

だが、これは単に大通りを外せばよいわけではない。

 ③なんにも見えない

反対に自宅周辺では信号機がほとんど無く止まることは無かったのだか反対に街頭が全くなく足元が一切見えずところによっては陥没した道や木の根っこで膨らんでいる歩道もあり 躓きそうになったところがいくつかあった。

先程のスマホでさえ走るのに邪魔なので懐中電灯などを持って走るのは絶対に嫌である。

そのため大通りを通らないかつ街頭が必要ない時間帯に走る必要があるのかもしれない。

 ④車がメッチャ危ない

夜の時間帯で普段はあまり人が通らないせいか、車が通りから出てくる際に一時停止のラインが有りながら、しない事が何回かあり危なかった。 これは事故を起こしてからでは遅いのでキチンと車が来ていないか確認してから通った方が良いと思う。

 対策と今後

①のスマホに関してはスポーツショップなどでランニングの際にかさばらない小さなカバン(?)かウエストポーチがあるらしいのでそれを明日にでも買って来ようと思う。

②と③に関しては走っている最中に止まるのはとても辛いので、出来れば走り続けられるコースがいい。それでかつ走っていても足元などが見える時間帯になるので早朝か日没前にしたほうがいいのかもしれない。

④に関してはまず当たり前として自分は決して飛び出ないことが前提であるが、こちらとしてはそれ以外に対策はあまり浮かばない

その他としてはせっかく始めたので今後も続けていきたいのでとりあえず今回のペースを下回らず1週間連続で続けたいと思う。

伊勢神宮に行ってきた

前回、やりたいことリストの中で神社仏閣巡りを上げていたが8月に伊勢神宮には行っていたので日程の設定等はしなかったので達成したという事にした

 伊勢神宮

伊勢神宮とは三重県伊勢市にある神宮の一つで正式名称が『神宮』であることからも、神社本庁の本宗に位置づけられている神社の中で一番上に位置するところである。 最近、20年に1度社殿を造り変える式年遷宮があったのでニュースなどでも取り上げられることが何度かあり、参拝者はここ数年は増加傾向にある。

また神宮は『外宮』と『内宮』の2つに別れており本来であれば外宮へお参りしてから内宮へお参りするのが基本ではあるが今回は都合上、内宮へのお参りのみである。

 ルート

神宮へは近畿鉄道を使い名古屋駅から宇治山田駅まで行き、その後三重交通のバスを使っかった。

f:id:nisiki_satika:20160923210127p:plain

f:id:nisiki_satika:20160923210225j:plain

名古屋から宇治山田までの切符、思ったよりも安かった

 宇治山田駅に行く前に

名古屋駅から宇治山田駅までは時間にして2時間程度ではあったのですぐに着いたのだがそれでもずっと外の風景を見ているのにも飽きるので本などの時間潰しを出来るものがあったほうがいいと思う。

また、近鉄の特急では車内販売は(昔はしていたらしいが)今はしていないのでおやつやお弁当などは予め駅などで買っておいた方がいい。 ただし、伊勢には名物料理が数多くあるので時間を調整してそちらを食べた方が良いと思う。

f:id:nisiki_satika:20160923210842j:plain

 宇治山田駅のまんぷく食堂

宇治山田駅に着いたら出てすぐ左手側に『宇治山田駅ショッピングセンター』という案内が少し離れたところに見えるが、その中にライトノベルの『半分の月がのぼる空』にチラッと登場する『まんぷく食堂』がある。 もし気になるようであれば行ってみるのも良いかもしれない。(今回は伊勢のおかげ横丁で食事をする予定なので残念ながら断念した)

f:id:nisiki_satika:20160923211241j:plain

宇治山田駅を出てすぐ左手側を向いた風景

f:id:nisiki_satika:20160923211321j:plain

宇治山田駅ショッピングセンターの文字(ショッピングセンターというより商店街っぽいが、失礼かもしれないが残念ながら寂れている)

f:id:nisiki_satika:20160923211442j:plain

半分の月がのぼる空に出てくるまんぷく食堂、作中でもからあげ丼を裕一たちが食べていた。

 宇治山田駅から神宮(内宮)まで

宇治山田駅から内宮までは三重交通のバスを使って行った。 終点まで行けば着くので特に迷うことは無いが道中、外宮前に止まるのでそこで降りて先に外宮へお参りするのが本来は正しいのかもしれない。

f:id:nisiki_satika:20160923211825j:plain

三重交通のバス停、宇治山田駅を出ると目の前にある

 神宮へ到着

終点まで乗ると(どっちに着くのか忘れたが)おはらい町かおかげ横丁に着くのでその観光施設のふもとが神宮になっている。

やはり神宮なので鳥居が立っておりその鳥居の先に木で作られた橋がかかっている。

f:id:nisiki_satika:20160923212700j:plain

そのまま、鳥居をくぐり、橋を渡って砂利道を進んで行くと手洗い場があるので、そこでお清めのため手を洗った。

手の清め方の順序としては

  1. 右手で柄杓に水を汲みその水で左手を清める
  2. 次にそのまま左手に持ち替え、右手を清める
  3. 次に右手に再度持ち替え、左の掌に水を杓から移しその左手の水で口をすすぐ
  4. 最後に杓を立てて中に残った水が下に流れてくるのを利用して持ち手を水で流して終わり

と自分は教わった。

宗派によっても異なるだろうし諸説あると思うので、その場その場に合わせた行い方が一番正しいと思う。

f:id:nisiki_satika:20160923213627j:plain

 五十鈴川

手洗い場から少し進むと目の前に五十鈴川が見える。 季節や天候にもよるが夏に行けば涼しそうな景色ではあるのだが、残念ながら今回は数日前に雨が降ったせいか増水しており、結構流れも急だった。

f:id:nisiki_satika:20160923214203j:plain

五十鈴川、前日などの天気が悪く少し増水している。 普段であれば、(入っていいのか知らないけど)小学生などが足や手などを入れたりしている。

f:id:nisiki_satika:20160923213917j:plain

 正宮

更に進むと石階段がありその上におそらく正宮がある。 神宮には参拝できるところがいくつかあるのだが、やはり他の所よりも綺麗かつ厳かな感じがする。

f:id:nisiki_satika:20160923214549j:plain

これより先にお参りできるところがあるが、撮影はここまでなので実際にお祈りするところは撮れない。

f:id:nisiki_satika:20160923214717j:plain

f:id:nisiki_satika:20160923214739j:plain

撮影はここまでの立て看板

f:id:nisiki_satika:20160923214817j:plain

別の位置からの撮影(勿論、石段下での撮影)

 荒祭宮

正宮でのお参りを終えて帰り道を進んで行くと、荒祭宮という所が見えてくる。 ここには、天照坐皇大御神荒御魂が御祭神として祀られているらしい。

天照坐皇大御神荒御魂とは天照大神のことであるが、だとしたら正宮には誰が祀られているのかと思うが、正宮にも天照大神が祀られている。 荒祭宮には名前から推測出来る通り天照大神の荒御魂が祀られているとのことである。

荒魂と和魂は、同一の神であっても別の神に見えるほどの強い個性の表れであり、実際別の神名が与えられたり、皇大神宮の正宮と荒祭宮といったように、別に祀られていたりすることもある。人々は神の怒りを鎮め、荒魂を和魂に変えるために、神に供物を捧げ、儀式や祭を行ってきた。この神の御魂の極端な二面性が、神道の信仰の源となっている。

Wikipediaより引用

つまり、ここには天照大神の別の魂が祀られているとのことで神宮では正宮に続く2番めに尊い処とされているらしい。

f:id:nisiki_satika:20160923221029j:plain

 余談、お願い事は荒祭宮?

誰から聞いたのか忘れてしまい、情報源の確認を取らなかったので1つの意見でしか無いのだが 以前、「正宮では神様に対して挨拶をする場所であり、お願い事をするのであれば荒祭宮でするのが正しい」と言われてた事がある。

ソースが不明確なので本当の話か分からないのだか次にお参りするときは、荒祭宮でお願いし正宮では挨拶を行おうと思う。 (今回は両方でお願い事をしてしまった。)

 参拝後

参拝後はおかげ横丁を見て回った。

昼食はここの中にある『すし久』というお店で手こね寿司を食べた。

手こね寿司はちらし寿司の1つだが、どちらかと言えばかつお丼(まぐろ丼)に近い。 醤油と酢で酢飯を作りその上に、醤油に漬け込んだカツオかマグロを載せた海鮮丼である。

酢飯の中に大葉が入っており、とても良い香りがしてとても美味しかった。

f:id:nisiki_satika:20160923221500j:plain

f:id:nisiki_satika:20160923221523j:plain

まぐろ丼が好きな人はたまらない一品だと思う。

 その他、伊勢名物

他に伊勢名物といえば赤福があげられると思うが、伊勢に来ると夏限定ではあるが『赤福氷』が食べることが出来る。

以前食べたのだが、抹茶味のカキ氷の中に小豆と餅が入っていてとても美味しい。

しかし、とても混んでいたのと先の手こね寿司でお腹がいっぱいで今回は断念した。

冬に来れば赤福氷ではなく『赤福ぜんざい』が売っているので次回行くときはそちらを食べようと思う(混んでなければ、多分行列だけれど…)

やりたいことリスト

最近全くブログを書かなくなったのでどうしようと考えてみたのだけれど、書かない理由としては書くことがないの1番の理由だろう。

当初、曜日ごとなどで書くことを決めようとしたのだけれどそれも続かない。

別にブログを書くことが目的ではないので、それでもいいのだがせっかくアカウントを持ち多少なりともお金や時間をかけているのだから続けて行きたいと思うしlog残し後になって見れれば思い出もになる。

その為、あえてブログを書くための目的づくりを決めようと思う。 ブログを書くために何かをするのは本末転倒だと思うかもしれないが、そうではなく『自分がやってみたいな』と思っていたことをリスト化しそれを消化していくことで普段の自分では『また今度にしよう』とか『今は時間やお金ないし』などの理由付けをしてしない自分をやめることができ、かつブログを書くこともでき一石二鳥なので『やりたいことリスト』を作成しようと思う。

やりたいことリスト

  1. 一眼レフカメラを買っていろいろ撮影する→買った
  2. バンジージャンプをする
  3. スキューバダイビングをやる
  4. スカイダイビングをやる
  5. パラグライダーをする
  6. ハーフマラソンに参加する
  7. フルマラソンに参加する
  8. 1週間連続で5Km走る
  9. 10Km走る
  10. 株の配当金を受け取る→貰った
  11. 株主優待をもらう→貰った
  12. 株主総会に参加する
  13. IPOに当選する
  14. シアターセットを作り映画鑑賞をする
  15. スポーツの試合を会場で観戦する
  16. 痩せる
  17. マッチョになる
  18. 自衛隊式の体力測定(?)で3級を目指す(クリアしたら更新)
  19. 彼女を作る
  20. 資格を30個取る
  21. 猟銃資格を取る
  22. 仕留めたイノシシか何かを食う
  23. いい自転車を買う
  24. バイクを買う
  25. 英語が話せるようになる
  26. ロシア語を話せるようになる
  27. 中国語を話せるようになる
  28. ヘリに乗る
  29. 値段が書いていないような寿司屋で食べる
  30. コミケに一般参加する
  31. コミケに作成側で参加する
  32. 月に10冊本を読む(クリアしたら更新)
  33. 47都道府県の全てに行く
  34. 富士総合火力演習を見に行く
  35. 外国に行く(達成したら行く国数を更新)
  36. 南極に行く
 神社仏閣巡りをする
  1. 伊勢神宮(8月頃行った)伊勢神宮に行ってきた
 日本の世界遺産に全て行く
  1. 法隆寺
  2. 姫路城
  3. 古都京都
  4. 白川郷の合掌造り
  5. 原爆ドーム
  6. 厳島神社
  7. 古都奈良
  8. 日光の社寺
  9. 琉球王国
  10. 紀伊山地の霊場と参詣道
  11. 石見銀山遺跡
  12. 平泉
  13. 富士山
  14. 富岡製糸場
  15. 明治日本の産業革命遺産 製鉄・製鋼、造船、石炭産業
  16. ル・コルビュジエの建築作品-近代建築運動への顕著な貢献-
  17. 屋久島
  18. 白神山地
  19. 知床
  20. 小笠原諸島

PythonのHTTPRequestを使ったスクレイピングの一部変更

前回PythonのHTTPRequestを用いて口座残高を取得するプログラムを書いたが、ほんの少し(数行)だけ減らすことができ、かつGETやPOSTが分かりやすく書くことができたため一部更新

www.jibunkijyun.net

変更点①:インポート

前回の通信ではCookieを有効にするため以下の文をの1行目と3行目が必要だったが下の1行目にまとめる事ができた

変更前
from urllib.request import build_opener, HTTPCookieProcessor
from urllib.parse import urlencode
from http.cookiejar import CookieJar
import re
変更後
import requests
import codecs
import re

変更点②:クッキーの定義

こちらは結局書かなくてはいけないので省略にはなっていないが分かりやすくなったと思う。

変更前
opener = build_opener(HTTPCookieProcessor(CookieJar()))
変更後
s = requests.Session()

変更点③:リクエストの方法

以前の方法であれば送るdataがあればPOST、なければGETに自動的になっていたが変更後は自分でPOSTかGETを決めPOSTであればdataを付けるようにした。

手間は増えたがぱっと見てどちらの要求か分かりやすいのでこちらに変更した。

変更前
#クッキーの設定
opener = build_opener(HTTPCookieProcessor(CookieJar()))
#GETの要求
res = opener.open(url)
#POSTの送信
res = opener.open(url, data)
変更後
#クッキーの定義
s = requests.Session()
#GETの要求
res = s.get(url)
#POSTの送信
res = s.post(url, data)

ソースコード全容

変更前
from urllib.request import build_opener, HTTPCookieProcessor
from urllib.parse import urlencode
from http.cookiejar import CookieJar
import re

# HTTP通信時にCookie処理を有効化
opener = build_opener(HTTPCookieProcessor(CookieJar()))

# ログインに使う送信データ
#実際はChromeのデベロッパーモードなどで1回通信して抜き出す
#1回抜き出せば今後も使える
post = {
    "JS_FLG":"1",
    "BW_FLG":"chrome,52",
    "_ControlID":"WPLE****",
    "_DataStoreID":"DSWPLETl*****",
    "_PageID":"WPLETl******",
    "_ActionID":"login",
    "getFlg":"on",
    "allPrmFlg":"on",
    "_ReturnPageInfo":"***",
    "user_id":"*****",
    "user_password":"*****",
    "ACT_login.x":"80",
    "ACT_login.y":"13"
    }
data = urlencode(post).encode('utf-8')

#トップページのurl
url = "https://site1.sbisec.co.jp/ETGate/"

#sbiにログイン
res = opener.open(url, data)

#口座管理ページのURL
#実際はURLをコピペして貼り付ける
kouzakanri = "https://site1.sbisec.co.jp/ETGate/?_ControlID=WPLETac***"
res = opener.open(kouzakanri)

#response(bytes)はHTMLのソースコードなので.read()で読み出す
html = res.read()
#bytes型をデコード
shift = html.decode('Shift_JIS')

#現金残高抜き出し,cash.group()で参照可能
try:
    cash = re.search("現金残高等[\">\'=<\/0-9A-Z\ra-z \n,]*",shift)
    cash = re.search("[0-9]*,[0-9]*",cash.group())
    cash.group()
except AttributeError:
    cash = re.search("現金残高等[\">\'=<\/0-9A-Z\ra-z \n,]*",shift)
    cash = re.search("[0-9]*",cash.group())
    cash.group()

#株式評価額
try:
    stock = re.search("株式<\/div>[\r\n]*(.)*[\r\n]*(.)*",shift)
    stock = re.search("[0-9]*,[0-9]*",stock.group())
    stock.group()
except AttributeError:
    stock = re.search("株式<\/div>[\r\n]*(.)*[\r\n]*(.)*",shift)
    stock = re.search("[0-9]*",stock.group())
    stock.group()

print("株式買付余力:" + cash.group())
print("株式評価額 :" + stock.group())
変更後
import requests
import codecs
import re
import urllib.parse

url = "https://site1.sbisec.co.jp/ETGate/"

post = {
    "JS_FLG":"1",
    "BW_FLG":"chrome,52",
    "_ControlID":"WPLE****",
    "_DataStoreID":"DSWPLETl*****",
    "_PageID":"WPLETl******",
    "_ActionID":"login",
    "getFlg":"on",
    "allPrmFlg":"on",
    "_ReturnPageInfo":"***",
    "user_id":"*****",
    "user_password":"*****",
    "ACT_login.x":"80",
    "ACT_login.y":"13"
    }

#クッキーの定義
s = requests.Session()
#post送信
res = s.post(url,data=post)
#口座管理のURL
stock_account_page = "https://site1.sbisec.co.jp/ETGate/?_ControlID=WPLETac***"
#GETの送信
res = s.get(stock_account_page)
#レスポンスをshift-jisに変換
res.encoding = "shift-jis"

#現金残高抜き出し,cash.group()で参照可能
try:
    cash = re.search("現金残高等[\">\'=<\/0-9A-Z\ra-z \n,]*",res.text)
    cash = re.search("[0-9]+,[0-9]+",cash.group())
    cash.group()
except AttributeError:
    cash = re.search("現金残高等[\">\'=<\/0-9A-Z\ra-z \n,]*",res.text)
    cash = re.search("[0-9]+",cash.group())
    cash.group()

#株式評価額
try:
    stock = re.search("株式<\/div>[\r\n]*(.)*[\r\n]*(.)*",res.text)
    stock = re.search("[0-9]+,[0-9]+",stock.group())
    stock.group()
except AttributeError:
    stock = re.search("株式<\/div>[\r\n]*(.)*[\r\n]*(.)*",res.text)
    stock = re.search("[0-9]+",stock.group())
    stock.group()

print("株式買付余力:" + cash.group())
print("株式評価額 :" + stock.group())

PythonのHTTPRequestを使ったスクレイピングでSBI証券の口座残額取得

いままでスクレイピングで利用していたSeleniumだがChromeの変更なのか動かないことがあるため、別の方法でスクレイピングをしようと思い HTTPを直接使えばいちいちウインドウが開くこともなくスムーズに動くと思い実際に作成を試みたが非常に難しく2週間かけてようやく出来たのでそのメモ

スクレイピングは時には大量のデータを送りつけたとして犯罪になる可能性があるので送信量には注意されたい。

HTTP

HTTPとはテキストを送るプロトコルでHTMLなどの転送に主に用いられるがその仕組をいまいち理解していなかった。

まずHTTPにはいくつかのメソッドがあるが主に使われるのがGETPOSTの2つである。

GET

GETメソッドは指定されたURLからリソースを取り出すもので通常のWebページの閲覧ではこれが主に使われる。

HTMLのソースコードも画像もJavaScriptやCSSなどもGETを使ってサーバに要求し取得する。

POST

POSTメソッドは反対に要求ではなくこちらからデータ等を送信するのに利用する。 ログインのIDのパスワードやその他の情報などをPOSTを使いサーバに送信する。

この点は、下記のサイトが非常に分かりやすかった。

www.yoheim.net

Cookie

HTTPはデータの送信や要求等ができるが全ての通信は独立しておりセッションを確立しない。 そのため1度行った通信相手をサーバが覚えている事ができない。

しかしそれではWebサーバがユーザ管理をできず同じページの表示しか返信できずユーザ毎にサービスを提供することができない。 それを改善するためにCookieというものが開発され実装された。

CookieはHTTPのヘッダに含められ、サーバがクライアントに対して送る。 クライアント(Webブラウザ)は次回以降サーバと通信する際にCookieを一緒に送ることでサーバ自分が誰かを教えることができる。

プログラムの流れ

以上の点から実際にHTTPの通信は以下のようになる。

1.SBI証券にユーザIDとパスワードをPOSTして認証してもらう。
2.認証が終わればCookieが帰ってくるのでそのCookieを使い口座残額のあるページを要求する。(厳密に言えば認証に失敗してもCookieは返ってる)
3.株価の残高取得ができたら続いて先物ページも同じく取得する。

という流れでプログラムの作成を試みた。

HTTPリクエストとCookieの実装

参考にしたサイトはこちら

www.yoheim.net

まずPythonでHTTPとCookieを使えるようにするために以下のモジュールをインポートする必要がある。

from urllib.request import build_opener, HTTPCookieProcessor
from http.cookiejar import CookieJar

続いてCookieを用意する

opener = build_opener(HTTPCookieProcessor(CookieJar()))

続いてSBI証券にログインするために自身のIDとパスワードを用意する

post = {
     "user_id":"*****",
     "user_password":"*****",
     }

これをHTTPのPOSTに乗せて送る必要があるのでutf-8にエンコードするがそのために下記のモジュールをインポートする必要がある

#エンコードするモジュール
from urllib.parse import urlencode
#エンコード
data = urlencode(post).encode('utf-8')

続いて実際にHTTPをPOSTしてみる

#トップページのurl
url = "https://site1.sbisec.co.jp/ETGate/"
res = opener.open(url, data)

残念ながらログインされた結果が帰ってこない。

f:id:nisiki_satika:20160828222841p:plain

帰ってきたHTMLのソースコードにユーザIDとパスワードを入力する欄がありログインできていなことが分かる。

POSTの盗聴

どうやらログインするのに必要なのはIDとパスワードだけではないらしくほかにも送らなければならない情報があるみたいだ。 そのため実際にログインする際の情報を確認してみることにする。

Chromeのデベロッパーモード

ChromeではF12を押すとデベロッパーモードが開きHTMLのソースコードや通信状態を監視することが出来る。

f:id:nisiki_satika:20160828223331p:plain

上の箇所がElementsになっているとソースコード、Networkにすると通信状態が表示されるようになるので、Networkに切り替えて通常通りログインしてみる。

f:id:nisiki_satika:20160828223638p:plain

すると幾つかの通信状態が表示されるので実際にログインした際の通信を表示してみる。
今回はログインしたので通信はPOSTになり、urlはETGateになるので画像で言えば1番上のになる。

実際にログインした際のPOSTデータを確認してみると確かにユーザIDとパスワード以外にもPOSTしていることが分かる。

f:id:nisiki_satika:20160828224301p:plain

(IDとパスワードは勿論だが、他の要素が何を表しているか調べてなく、問題はないとは思うが個人IDであるとマズいので一部、塗りつぶした。)

POSTデータの修正

上記の結果からPOSTデータを修正してみるが他の要素が何を表しているか不明であるがとりあえずそのまま送ってみることにする。

post = {
    "JS_FLG":"1",
    "BW_FLG":"chrome,52",
    "_ControlID":"WPLE****",
    "_DataStoreID":"DSWPLETl*****",
    "_PageID":"WPLETl******",
    "_ActionID":"login",
    "getFlg":"on",
    "allPrmFlg":"on",
    "_ReturnPageInfo":"***",
    "user_id":"*****",
    "user_password":"*****",
    "ACT_login.x":"80",
    "ACT_login.y":"13"
    }

このPOSTデータを再度、送信してみる。

data = urlencode(post).encode('utf-8')
res = opener.open(url, data)

#帰ってきたHTMLのソースコードをテキスト保存
with open('source.text', 'wb') as f:
    f.write(res.read())

f:id:nisiki_satika:20160828225154p:plain

今度はソースコードに重要なお知らせとあり、ログインに成功したことが分かる。

続いて口座管理のURLを予めコピーしておきそのURLをGETする。

f:id:nisiki_satika:20160828225632p:plain

右クリックでリンクアドレスのコピーで良い

kouzakanri = "https://site1.sbisec.co.jp/ETGate/?_ControlID=WPLETac***"
res = opener.open(kouzakanri)

今回も一応、非表示にした。

あとは先のレスポンスをテキストにするなり正規表現等を使って抜き出すなりすれば良い。

正規表現

ちなみに正規表現で抜き出すにはreをインポートする必要がある

#正規表現のインポート
import re
#response(bytes)はHTMLのソースコードなので.read()で読み出す
html = res.read()
#bytes型をデコード
shift = html.decode('Shift_JIS')

#現金残高抜き出し,cash.group()で参照可能
#残高が1000円以上
try:
    cash = re.search("現金残高等[\">\'=<\/0-9A-Z\ra-z \n,]*",shift)
    cash = re.search("[0-9]*,[0-9]*",cash.group())
    cash.group()
#残高が1000円未満だとこっちが走る
except AttributeError:
    cash = re.search("現金残高等[\">\'=<\/0-9A-Z\ra-z \n,]*",shift)
    cash = re.search("[0-9]*",cash.group())
    cash.group()

#株式評価額
try:
    stock = re.search("株式<\/div>[\r\n]*(.)*[\r\n]*(.)*",shift)
    stock = re.search("[0-9]*,[0-9]*",stock.group())
    stock.group()
except AttributeError:
    stock = re.search("株式<\/div>[\r\n]*(.)*[\r\n]*(.)*",shift)
    stock = re.search("[0-9]*",stock.group())
    stock.group()

print("株式買付余力:" + cash.group())
print("株式評価額 :" + stock.group())

ソースコード全容

ソースコードをつなげて再度載せる

from urllib.request import build_opener, HTTPCookieProcessor
from urllib.parse import urlencode
from http.cookiejar import CookieJar
import re

# HTTP通信時にCookie処理を有効化
opener = build_opener(HTTPCookieProcessor(CookieJar()))

# ログインに使う送信データ
post = {
    "JS_FLG":"1",
    "BW_FLG":"chrome,52",
    "_ControlID":"WPLE****",
    "_DataStoreID":"DSWPLETl*****",
    "_PageID":"WPLETl******",
    "_ActionID":"login",
    "getFlg":"on",
    "allPrmFlg":"on",
    "_ReturnPageInfo":"***",
    "user_id":"*****",
    "user_password":"*****",
    "ACT_login.x":"80",
    "ACT_login.y":"13"
    }
data = urlencode(post).encode('utf-8')

#トップページのurl
url = "https://site1.sbisec.co.jp/ETGate/"

#sbiにログイン
res = opener.open(url, data)

#口座管理ページのURL
kouzakanri = "https://site1.sbisec.co.jp/ETGate/?_ControlID=WPLETac***"
res = opener.open(kouzakanri)

#response(bytes)はHTMLのソースコードなので.read()で読み出す
html = res.read()
#bytes型をデコード
shift = html.decode('Shift_JIS')

#現金残高抜き出し,cash.group()で参照可能
try:
    cash = re.search("現金残高等[\">\'=<\/0-9A-Z\ra-z \n,]*",shift)
    cash = re.search("[0-9]*,[0-9]*",cash.group())
    cash.group()
except AttributeError:
    cash = re.search("現金残高等[\">\'=<\/0-9A-Z\ra-z \n,]*",shift)
    cash = re.search("[0-9]*",cash.group())
    cash.group()

#株式評価額
try:
    stock = re.search("株式<\/div>[\r\n]*(.)*[\r\n]*(.)*",shift)
    stock = re.search("[0-9]*,[0-9]*",stock.group())
    stock.group()
except AttributeError:
    stock = re.search("株式<\/div>[\r\n]*(.)*[\r\n]*(.)*",shift)
    stock = re.search("[0-9]*",stock.group())
    stock.group()

print("株式買付余力:" + cash.group())
print("株式評価額 :" + stock.group())

先物

先物のページについては後日記載

参考にしたサイト(再掲)

[Web] HTTPリクエストの中身を学んでみた。GETやPOSTの違いなど - YoheiM .NET

[Python] HTTP通信にCooki処理を追加して、はてなにログインする - YoheiM .NET

[Python] HTTP通信でGetやPostを行う - YoheiM .NET

Python2とPython3でHTTP POST+Cookie処理の比較 - yattの日記

Pythonでのウェブサイトへのログイン - Qiita

PythonでCookieを使ってWebサイトにログイン - matsulibの日記

この夏休みにシンゴジラを小さいお子さんと見ようと思っている人は注意してほしい

シンゴジラを見てきた。 当初の予定手では、さまざまブログやSNS等でいろいろな感想が書かれているので私自身はこの面白さを文字として表すことが出来ずむしろイメージダウンになってしまうとも思い書かないつもりであった。

しかし、実際に見た者として注意してほしいことがあるので書こうと思う。 (できるだけネタバレはしないように書くつもり)

ゴジラ作品

私はゴジラを今まで1回も見たことがない。 理由としては小さい頃から特撮をほぼ見ていないからなのか、あまり好きではない。そのため今回のシンゴジラも当初は見る予定では無かった。

にも関わらず今回、見た理由

当初、見ない予定だったものを何故見たのかといえば冒頭にも書いたように、さまざまなブログやSNS等で感想が書かれており、それを読み実際に見てみたくなった。

見た感想(ネタバレ無し)

実際に見て、私は非常に面白かったと思う。 ほかのゴジラ作品がどの様に展開され終結するのかは一切知らないが、初めてゴジラ作品に触れこんなにもゴジラとは面白いものなのかと思ったと同時に監督の庵野秀明氏の才能の凄さに感動を覚えた。

庵野秀明監督といえばジブリ作品の「風の谷のナウシカ」の巨人兵の作画やエヴァなどで有名であるが彼の描く爆発シーンなどはとても見応えがあり見ていて爽快感がある。 一方で彼の作った特撮作品はエヴァと同時上映された「巨人兵東京に現る」しか私は知らず、こちらの作品も面白かった記憶はあるがメインのエヴァにのまれてしまいほとんど覚えておらず、やはり彼はアニメの監督とのイメージが強かった。

しかし今回、シンゴジラを見て思うのは彼はアニメの監督だけでは無く、映像作家として素晴らしい才能の持ち主であると思う。

それでも見るのに注意してほしい

シンゴジラはとても面白く私としては見て損は無い映画だと思うが、それでも見る人にとっては注意してほしいところがある。

今年から8月11日が山の日となり祝日となった。それに合わせて幾つかの企業もそこからお盆休みに入るところも多いと思う。 そして休みに入ってから家族で出かけることも多くなり、行き先に映画館を選ぶ人達もいると思う。

そこでシンゴジラを見ようと思うかもしれないが、もしお子さんが小学校低学年であるであればやめたほうがいいかもしれない。 どうしても見たいというのであれば私に止める資格など無いが、お子さんの年齢が中学生以上、最低でも小学校高学年であったほうがよく私としては小学生ではあまり面白く無いのではないかと思う。

なぜ小学生ではお勧めできないのか

勘違いしないで欲しいが小学生や中学生に対して一切見るなと言っている訳ではない。 むしろこの作品は多くの人に見て欲しいと思っている。

それでも、なぜやめたほうがいいのかといえば
(ここからやや本編の内容について触れるができるだけネタバレはしないように書くつもり)









映画『シン・ゴジラ』公式サイト

シンゴジラを公式ホームページに言って予告があるので見て欲しいのだが(テレビCM版は不要)、この予告でも描かれているのだが、会議などでスーツを着た人たちが出てくるシーンとゴジラと戦うシーンで作られているが、実際のところゴジラが街を破壊したり人間たちが協力してゴジラをやっつけるシーンは全体の半分もないのである。

上記にも書いたが、私はほかのゴジラ作品を見たことが無く他の作品ではどの様にストーリーが進むのかは全く知らないのだが、このシンゴジラをでは大半の話が政治家や官僚たちの立ち回りが描かれている。

これが小学生、ましてや低学年の子たちでは退屈で仕方ないと思う。

今日見てきた観客の中にも小さい子が後ろの方に居たのだが、終始「つまらない」や「ゴジラまだなの?」など結構大きな声で騒いでおり不愉快なことこの上なかった。

無論、全ての子供がつまらないからといって映画の上映中に喋ったり物を叩いたりと静かにできないわけではなく、むしろ大多数の子たちは静かに見れると思う。 たとえ煩かったとしても親が注意すれば大抵は静になるものだと思っているのだが、それでも中に言うことを聞かずずっと煩いままの子もいるだろう。

もし自分の子が退屈な場面であれば静かにできないのであれば今夏、映画に行くのであれば別の作品のほうが面白く楽しめると思う。

最後に

上でも書いたがこの作品は大勢の人にみてもらいたいと私は思っている。 むしろ多感な時期にこの作品を見ることによって映画の素晴らしさを知り、未来の夢が映画監督を目指す子が出てくるのではないのかと思える作品である。

そんな素晴らしい映画であるのだから館内では静かに見て欲しいと思う。