2017年07月20日

「さくらのブログ」のスマートフォン用のデザインが増えた?

「さくらのブログ」のスマートフォン用デザインはいままで「シンプル」と言われている下記の様な微妙なデザインのものしかなかったのですが

20170720_ss_0.png

知らないうちに「photo_xxxx」という名前の今どきのデザインのものが追加されたみたいです。

20170720_ss_1.png

TOPページがブログカードみたいになっています。「さくらのブログ」の不満点をネットで調べると「スマホ用のデザインがしょぼい!!」という意見があったので対応してくれたみたいですね。早速変更してみました。

ちなみに機種によっては表示が変な場合があるみたいですが、上記の画面が表示されていない場合は本来はこんな感じのイメージなんだなーと思っていただければ幸いです。
posted by くまなべ at 21:36 | Comment(0) | TrackBack(0) | 日記

2017年07月19日

とりあえずブログカードを自分で生成してみた

WordPressやはてな等でよく見る「ブログカード」があります。多分↓な感じなものだと思うのですが……
BLOG開始の自己紹介がてら半年に1度作成しているリスク資産状況です。...
で、このブログは「さくらのブログ」で作成しているのですが、「さくらのブログ」でのブログカードの作成方法が分からなかったため、今まで他のサイトの方のhtmlタグを参考にしながらタグを書いていました。

とは言っても、これだと非効率なのでリンクを入力すると自分用のブログカードを作成してくれるスクリプトをPythonで作成してみました。(画像は熊の絵で固定ですが……)

どんなものかと言うと・・・

Textのフォームにブログカードを作成したいLinkを記入して「作成」のボタンを押すと
20170719_python_0.jpg

下記の様なリンクカードを生成します。
20170719_python_1.jpg
あとは上記のタグを張り付ける形になります。見ての通りですがlocalhostでのCGIで実施しています。

備忘録代わりのソースコードは下記となります。
続きを読む
posted by くまなべ at 21:07 | Comment(0) | TrackBack(0) | Python

2017年07月17日

サンリオ株主優待到着

サンリオから株主優待が届きました。
20170717_sanrio_0.jpg

いつものピューロランド入場券以外だと、飛び出す麺棒ケースが届きました。以前も携帯綿棒入れが届いたのですが、今回はパワーアップして据え置き用のものです。頭を下に押すとてっぺんから綿棒が出てくる仕組みです。

20170717_sanrio_1.jpg

この麺棒ケースはキティちゃん以外にもポムポムプリンとかのもあるみたいですね
posted by くまなべ at 15:05 | Comment(0) | TrackBack(0) | 株主優待

2017年07月16日

インデックス投資とアクティブ投資のTwitter検索結果解析(Python + Tweepy + janome)環境・コード編

前回の結果編に対しての環境・コード内容です。

PythonでTwitterの検索結果の解析をやってみたいなーということで、「イ...



使用するモジュールなど

下記を今回使用しています。
  • Tweepy
  • janome
> pip install janome
> pip install tweepy
また、foregoも用いていますダウンロードしたファイルを実行DIR直下に置いています。詳細情報は下記となります。

ソースコードとforego用環境ファイル

ソースコードは下記となります。
# coding='utf-8'

import os
import sys
import types
import json
import tweepy
import codecs
from requests_oauthlib import OAuth1Session
from janome.tokenizer import Tokenizer

# 環境変数から認証情報を取得する。
CONSUMER_KEY = os.environ['CONSUMER_KEY']
CONSUMER_SECRET = os.environ['CONSUMER_SECRET']
ACCESS_TOKEN = os.environ['ACCESS_TOKEN']
ACCESS_TOKEN_SECRET = os.environ['ACCESS_TOKEN_SECRET']

# 引数
searchWord = sys.argv[1] # 検索WORD
maxPage = int(sys.argv[2]) # maxPage * 100のTweetを取得する
outputNum = int(sys.argv[3]) # 上位outputNum個の単語を出力する
outFileName = sys.argv[4] # Debug用出力ファイル(Tweetを保存)

# 初期化
maxId = 999999999999999999 # 検索結果用ID
maxIdOld = 999999999999999999 # 検索結果用ID
words = {} # 単語とその登場回数を格納
searchPage = 0

# 認証情報を使う
auth = tweepy.OAuthHandler(CONSUMER_KEY,CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN,ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)

# 出力ファイルOpen
outFile = open(outFileName,'w',encoding='utf-8')

# 日本語の解析
# Userの辞書を使用するときは前者を使う
# t = Tokenizer("userdic.csv", udic_type="simpledic", udic_enc="utf8")
t = Tokenizer()

while True:
# maxIdは前のid-1を渡すことに注意
searchTweets = api.search(q=searchWord,count=100,result_type='recent',max_id=maxId-1)
for tweet in searchTweets:
# Debug用にTweetをTextに保存しておく
cmdline = str(tweet.user.screen_name) + str(tweet.text) + str(tweet.created_at) + str(tweet.id) +'\n'
outFile.write(cmdline)

# Tweet内容を解析して単語にばらす
tokens = t.tokenize(tweet.text)
for token in tokens:
if token.part_of_speech.split(',')[0] == u'名詞':
# 名詞の取得
# 初めて出てきた名詞なら1.2度目以降はincrして登場回数を保存
if token.surface in words:
words[token.surface] += 1
else:
words[token.surface] = 1
elif token.part_of_speech.split(',')[0] == u'動詞':
# 動詞の取得
# 動詞は原型で保存する
if token.base_form in words:
words[token.base_form] += 1
else:
words[token.base_form] = 1

# idが今までのより小さければ代入
if(tweet.id < maxIdOld):
maxId = tweet.id
if maxIdOld == maxId:
# Tweetが見つからなければmaxIdOldと変わらないので検索結果をすべて受けとったと判断
break
elif searchPage == maxPage:
# もしくは最大で引数で指定したmaxPagex100までのTweetをチェックする
break
else:
maxIdOld = maxId
searchPage += 1

outFile.close()

# 単語の発生回数で降順に並べて出力する
loopNum = 0
for key,value in sorted(words.items(), key=lambda x: -x[1]):
# 特定の文字列は出力結果から除外
if not key in ['@',':','/',')','(','#','.','_', # 1文字記号
'0','1','2','3','4','5','6','7','8','9', # 1文字数字
'RT','co','https','://','t', # 特定文字列[1Byte]
'の']: # 特定文字列[2Bytes]
# Twitter検索で引っかかった単語(key)と登場回数(value)を出力
print(loopNum+1,key,value)
loopNum += 1
# 指定した分だけ単語を出力したら終了
if(loopNum == outputNum):
break

また環境変数をforego経由で渡すために.envという下記のようなファイルも作成しています。(ちなみに正式なファイルにはちゃんとしたKEYやTOKENを記載しています)

CONSUMER_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CONSUMER_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ACCESS_TOKEN_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

それにしてもPythonはモジュールをpipでインストールして少しコードを書けば色々なことができるんですね。
posted by くまなべ at 21:02 | Comment(0) | TrackBack(0) | Python

インデックス投資とアクティブ投資のTwitter検索結果解析(Python + Tweepy + janome)結果編

PythonでTwitterの検索結果の解析をやってみたいなーということで、「インデックス投資」と「アクティブ投資」をTweepyを用いてTwitter検索して、検索結果をjanomeでの解析を実施してみました。長くなるので、まずは結果だけです。

結果

コマンドと結果です。登場回数上位10位の単語とその登場回数を出力しています。

インデックス投資

> .\forego.exe run python.exe .\tweepy_search.py "インデックス投資" 1000 10 bbb.txt1 
投資 19342
インデックス 16393
ナイト 8694
する 7525
2017 2976
ブログ 2287
いる 1688
参加 1599
資産 15710
更新 152
 結果は上記のようになり、おそらく「インデックス投資ナイト2017」の話題が回数的に多いのかなと思いました。

アクティブ投資

> .\forego.exe run python.exe .\tweepy_search.py "アクティブ投資" 1000 10 bbb.txt1 
投資 3512
アクティブ 2223
インデックス 1464
する 1145
信託 1126
型 897
ナイト 728
人 629
48 5810
AKB 53
結果は上記のようになりました。AKB48が話題に上がっているみたいでなんだろうと思ったのですが、どうやら下記が影響しているみたいです。




あと興味深いのは「インデックス投資」で検索すると「アクティブ」は上位に来ないのに、「アクティブ投資」で検索すると「インデックス」が上位に来るんですね。

実際の環境やコードの備忘録は環境・コード編に続きます。
posted by くまなべ at 15:57 | Comment(0) | TrackBack(0) | インデックス投資

2017年07月15日

ディジタルメディアプロフェッショナル(DMP)のQUOカードと売却

毎年、DMPはアンケートや議決権行使をするとQUOカードが貰えるという記事を以前書きました。


で、今年もアンケートが株主総会の案内と同封されており、そのアンケートに答えたためQUOカードが届きました。

20170715_DMP_0.jpg


今年は1000円分でした。

一方で、2700円程度だった株価が3800円まで上がったので一度売却しました。次は3000円ぐらいまで落ち着いてきたときに再度購入したいと思います。
posted by くまなべ at 20:58 | Comment(0) | TrackBack(0) | 株式

2017年07月14日

Python + SeleniumでSBI証券の保有資産データを取得

Python関連を連続して書いているけれど、投資に関連する内容も!ということでSBI証券の保有資産データを取得&分類分けをしてEXCELでパイチャートを作成してみました。

まずは結果から

下記の様なパイチャートを含むEXCELを自動生成しました。国内株と投資信託のデータを取得して8分類に分けています。8分類なのはeMAXIS Slimバランスがあるからなのですが。
20170715_python_0.jpg

使用モジュール

EXCELのデータを吐き出すためにopenpyxlをインストールしています

> pip install openpyxl
続いてコード関連です。
続きを読む
posted by くまなべ at 22:44 | Comment(0) | TrackBack(0) | Python

2017年07月13日

アイコンを作ってみる

プロフィールに画像がなかったので1〜2時間ぐらいで作ってみました。熊と財布のアイコンです。

kumaIcon_100x100.png

Twitterもこのアイコンにしてみました。


posted by くまなべ at 21:00 | Comment(0) | TrackBack(0) | 日記

2017年07月12日

Python + Seleniumによるヨドバシカメラ注文履歴の取得

Amazon注文履歴取得の時にも書きましたが、家計管理上、毎月の自分が使った分は分類でまとめたEXCELを作成して妻に送っています。そのデータには自分のクレジットカードの内容も含まれています。クレジットの明細だけだと、何を買ったのか分からないため過去の履歴を知りたい時があります。実はよっぽどのことが無い限り紙の本はAmazonではなくヨドバシで買っているので、ヨドバシの履歴も必要になります。

今回は「Python + Selenium」で取得してみました。備忘録替わりのソースコードは後回しで先に実行方法と結果です。

必要なもの

Seleniumとchromdriver(ブラウザにChromeを使っているので)をインストールしました。

コマンドと実行結果

引数にID(メールアドレス)とパスワードを渡して実行して3か月分の結果を取得します。
> python.exe .\yodobashi_order_history.py <ID> <Password>
Navigating...
Signing in...
---------------
注文日:2017年7月7日 注文番号:2142606149 ヨドバシ・ドット・コムでのご注文: 配達受取商品
  Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド- [ムックその他]
---------------
注文日:2017年6月11日 注文番号:2141144933 ヨドバシ・ドット・コムでのご注文: 配達受取商品
  リンスインシャンプー つめかえ用 [400ml]
  Fシステムサムライエッジ 8P [T字カミソリ替刃]
---------------
注文日:2017年4月22日 注文番号:2138765666 ヨドバシ・ドット・コムでのご注文: 配達受取商品
  KF-C118G-3A [microSDHCカード 8GB Class4]
  BSCR19U2WH [高速カードリーダー/ライター ホワイト]
値段は出力できていないのですが、クレジット明細に出ているのでわざわざ出力しなくても良いかなと思って出力していません。

つづいてソースコードです。

続きを読む
posted by くまなべ at 20:37 | Comment(0) | TrackBack(0) | Python

2017年07月11日

PythonによるAmazon注文履歴取得の拡張

以前に書いたのですが、家計管理上、毎月の自分が使った分は分類でまとめたEXCELを作成して妻に送っています。そのデータには自分のクレジットカードの内容も含まれています。

分類作成時に困ること

クレジットの明細を見れば大抵のものは分類ができるのですが、困ったことにAmazonは本・家電など色々なものが含まれるためクレジット明細だけでは分類ができず、サインインしたりメールを掘り出したりして何を買ったかを確認しないといけません。

対応策

PythonでAmazon注文履歴取得を取得するようにしました。といっても「Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド」を読みつつベースのコードを拡張しただけですが。

改変箇所

元々のコードだと、購入日と合計金額しか出力していません。そのため購入物も分かるようにしました。修正したのはprint_order_histryのみです。

def print_order_history():
"""
現在のページのすべての注文履歴を表示する。
"""
# ページ内のすべての注文履歴について反復する。ブラウザーの開発者ツールでclass属性の値を確認できる。
# 商品名を取得するためにorder-infoからorderに変更する
for line_item in browser.select('.order'):
order = {} # 注文の情報を格納するためのdict。
# 注文の情報のすべての列について反復する。
for column in line_item.select('.a-column'):
label_element = column.select_one('.label')
value_element = column.select_one('.value')
# ラベルと値がない列は無視する。
if label_element and value_element:
label = label_element.get_text().strip()
value = value_element.get_text().strip()
order[label] = value
print(order['注文日'], order['合計']) # 注文の情報を表示する。
# 商品名はhrefを目印にして取得できる。ただし画像からのリンクと区別するためにa-row直後のhrefを用いる
for title_element in line_item.select('.a-row > a[href^="/gp/product"]'):
if(title_element):
print(" " + title_element.get_text().strip())
print("")

出力結果

下記のような出力結果となり、コマンド一発で何を買ったのかが分かるようになりました。昨日頼んだおむつが一番最新の注文として出力されています。
2017年7月10日 ¥ 3,230
  グーン パンツ BIG (12~20kg) 156枚(52枚×3) 女の子 やわらかパンツ 【ケース販売】
 
2017年6月14日 ¥ 367
  uxcell HPノートパソコン用 修復部品 プラスチック トラックポイント ブルーキャップ  2個入り 高さ4.0mm
<<<後略>>>
 
posted by くまなべ at 20:31 | Comment(0) | TrackBack(0) | Python