元職業エンジニアの生き方

これまでとこれからを考えるための備忘録

Centos7の初期設定にてOS環境を日本語化する為の備忘録

宮本です。 Twitterコチラ

はじめに

環境構築する上で重要なコマンドたちを備忘録として残していきます。

仕様

  1. yum最新
  2. OS日本語化

環境的なあれこれ

  • OS:Centos7


実装

yum最新化

sudo yum update

OS全体の日本語化(変更前の日付がUTCから日本時間なる確認)

date
sudo localectl set-locale LANG=ja_JP.UTF-8
source /etc/locale.conf
sudo timedatectl set-timezone Asia/Tokyo
date

 

結果

日付がUTCから日本時間になった上で、そもそもが日本語表記なったかと思います。

SeleniumとPythonでツイッターアナリティクスのデータを自動でエクスポートする

宮本です。 Twitterコチラ

はじめに

ツイッターのアナリティクスのデータを自動でエクスポートしてみました。

APIあるかもしれませんが、それは追々。

仕様

  1. ツイッターへ自動ログイン
  2. ツイッターアナリティクス画面から自動でエクスポート(作業ディレクトリにエクスポート)

環境的なあれこれ


実装

python:tweet_export.py


#!/usr/bin/
# -*- coding: utf-8 -*-

import os, time
import selenium.webdriver

url = 'https://analytics.twitter.com/user/{your account}/tweets'
DL = os.getcwd()
print('DL : ' + DL)

user_account = 'your account'
user_password = 'your password'

webdriver = selenium.webdriver
chop = webdriver.ChromeOptions()
prefs = {"download.default_directory" : DL}
chop.add_experimental_option("prefs", prefs)
chop.add_argument('--disable-gpu')
chop.add_argument('--no-sandbox')
driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver', chrome_options = chop)
    
driver.implicitly_wait(15)
driver.get(url)

driver.implicitly_wait(15)
login_user = driver.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/fieldset/div[1]/input')
login_pass = driver.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/fieldset/div[2]/input')
login_user.send_keys(user_account)
login_pass.send_keys(user_password)

time.sleep(5)
login_pass.send_keys('\n')

time.sleep(5)
driver.get(url)

driver.implicitly_wait(15)
dl_path = driver.find_element_by_xpath('//*[@id="export"]/button/span[2]')
dl_path.click()
time.sleep(30)

driver.quit()

 

結果

こちらのコードだと特に指定していないので、実行日から過去28日間(デフォルト指定)のデータをエクスポートします。

インターバルとか結構適当なのでそこはよしなに変更したり、迷惑書けない程度で設定してください。

これを関数化などをすると業務でも利用できるかと思います。

ちなみにAPIがあるならそちらを利用して下さいね。これはあくまでプログラムのテストで実施したものです。

外部リンク

TABIREKI - 様々なツールやデータ一覧を公開

PythonからツイッターAPIを使って投稿してみました

宮本です。 Twitterコチラ

はじめに

RSS記事などを自動取得出来たのでそれを自動ツイートさせる為に、PythonからツイッターAPIを使って投稿テストしたので備忘録

仕様

  1. ツイッターから自分のアクセスキーなど取得
  2. ツイッターTwitter)公式APIを利用して自動で投稿

環境的なあれこれ

実装

python:tweet.py


#!/usr/bin/
# -*- coding: utf-8 -*-

from requests_oauthlib import OAuth1Session

Customer_Key    = 'ご自身のカスタマーキー'
Customer_Secret = 'ご自身のカスタマーシークレット'
Access_Token    = 'ご自身のトークン'
Access_Secret   = 'ご自身のトークンシークレット'

msg = 'これはツイッターAPIテストで送信しています!'
url = 'https://api.twitter.com/1.1/statuses/update.json'
params = {'status' : msg}

twitter = OAuth1Session(Customer_Key, Customer_Secret, Access_Token, Access_Secret)
req = twitter.post(url, params = params)

if req.status_code != 200:
    print ("API Error: %d" % res.status_code)

結果

これ自体は固定文での投稿なので、あまり実務的ではないです。

これを利用して下記のRSSからニュースを自動取得したものを投稿するプログラムを作成しています。

投稿が成功すれば何も出力されず、失敗したらエラーメッセージがでます。

外部リンク

TABIREKI - 様々なツールやデータ一覧を公開

Pythonを使ってRSSから毎時でニュース記事を取得してそれを表示させてみた

宮本です。 Twitterコチラ

はじめに

機械学習に向けて情報収集の観点からRSSからデータを取得するプログラムを書いてみました。

取得対象は、とりあえずZDNet Japanの一部のRSSのみです。

仕様

  1. データベースに登録しているニュース記事を取得
  2. ZDNet JapanフィードからRSSでニュース記事を取得する
  3. 既に登録してあるデータと新たに取ってきたデータを突き合わせてなければデータベースに登録(既に登録されている場合は登録しない) ※HTML上で表示させてみたのでそれも合わせて見てみて下さい。▶コチラ

環境的なあれこれ


実装

python:zdnet_rss_regist.py


import json
import database
import feedparser

url = 'feed://feeds.japan.zdnet.com/rss/zdnet/all.rdf'
rss = feedparser.parse(url)
media_id = 1

conn, cursor = database.db()
news_list = database.selectNews(conn, cursor, media_id)

zdnet_list = []
for data in rss['entries']:
    value = data['summary_detail']['value'].replace('<p>', '').replace('</p>', '')
    url = data['links'][0]['href'].encode('utf-8')
    if (url in news_list) is False:
        if value.find('jpg') > -1:
            zdnet_list.append([
                media_id
                , url
                , data['title']
            ])

database.insertNews(conn, cursor, zdnet_list)
database.closeDB(conn, cursor)

 

結果

import databaseは独自で作成したMySQLにコネクトしたり、値を取ってきたりするファイルになります。

※ちょっと別のタイミングを見てコチラも公開シていきたいと思ってます。

database.selectNews:既に登録してあるデータからSelect処理

database.insertNews:新たにデータを登録する為のInsert処理

それと定期実行の為にCronを利用していて、現在1時間に1度処理を動かしている状態です。

ご要望があれば優先的に書きます。

外部リンク

TABIREKI - 様々なツールやデータ一覧を公開

Pythonを使ってRSSで最新ニュース記事を取得する

宮本です。 Twitterコチラ

はじめに

機械学習に向けて情報収集の観点からRSSからデータを取得するプログラムを書いてみました。

仕様

  1. ZDNet JapanフィードからRSSでニュース記事を取得する
  2. 取ってきたデータをリスト化する

環境的なあれこれ


実装

python:zdnet_rss.py


#!/usr/bin/
# -*- coding: utf-8 -*-

import json
import feedparser

url = 'feed://feeds.japan.zdnet.com/rss/zdnet/all.rdf'
rss = feedparser.parse(url)

zdnet_list = []
for data in rss['entries']:
    value = data['summary_detail']['value'].replace('<p>', '').replace('</p>', '')
    zdnet_list.append([
        data['updated']
        , data['title']
        , data['links'][0]['href']
        , value[:value.find('<br')]
        , value[value.find('<img'):].replace('<img src="', '').replace('" /></a>', '')
    ])

print(zdnet_list)

 

結果

最後に出力させているんですがリスト化させているのでユニコード形式になってます。

これをCSVに出力させたり、データベースにいれたり。

JSONのキーをループさせてキー存在をするなどもっと丁寧なやり方もできそうです。

ちょっと色々と試してみたいところですね。

SeleniumとPythonでGoogle検索を実施して検索結果の1番目を取得する

宮本です。 Twitterコチラ

はじめに

SeleniumPythonで操作する勉強をしているのでその備忘録です。

仕様

  1. キーワードでGoogle検索の1番目のURLを取得

環境的なあれこれ


実装

python:google_url.py


#!/usr/bin/
# -*- coding: utf-8 -*-

import os, io, time
import urllib2 as urllib
import selenium.webdriver
from PIL import Image

kw = u'道後温泉'
url = 'https://www.google.co.jp/'

webdriver = selenium.webdriver
chop = webdriver.ChromeOptions()
chop.add_argument('--disable-gpu')
chop.add_argument('--no-sandbox')
driver = webdriver.Chrome(executable_path='your chrome driver path', chrome_options = chop)
driver.implicitly_wait(15)
    
driver.get(url)
print(driver.current_url)
time.sleep(5)

print('KW : ' + kw)
xpath = '//*[@id="lst-ib"]'
search = driver.find_element_by_xpath(xpath)
search.send_keys(kw)
time.sleep(5)

xpath = '//*[@id="sbtc"]/div[2]/div[2]/div[1]/div/ul/li[9]/div/span[1]/span/input'
button = driver.find_element_by_xpath(xpath)
button.click()
time.sleep(5)

xpath = '//*[@id="rso"]/div[1]/div/div[1]/div/div/h3/a'
first_url = driver.find_element_by_xpath(xpath)
print(first_url.get_attribute('href'))

driver.quit()

 

結果

上記の場合道後温泉の検索結果1番目が出力されるはずです。

 

今回はあえてPython上のSleepを実施しましたが、本来は要素表示を待って動作をするほうがよいです。

それとXpathでの取得をしてみましたが、もちろんaタグなどの要素を取得することもできます。

SeleniumとPythonでYahoo画像検索から自動で画像をダウンロードする

宮本です。 Twitterコチラ

はじめに

機械学習に手を出す際に「画像取得だ!」と思いつきでやってみました。 BeautifulSoupでも出来そうですがあえてSeleniumを使いました。

仕様

  1. キーワードでYahoo画像検索
  2. 最初の1枚目を自動でダウンロード

環境的なあれこれ


実装

python:yahoo_image.py


import os, io
import urllib2 as url lib
import selenium.webdriver from PIL import Image

kw = '道後温泉'
url = 'https://search.yahoo.co.jp/image/search?p=' + kw
DL = os.getcwd() print('KW : ' + kw) print('DL : ' + DL)

webdriver = selenium.webdriver
chop = webdriver.ChromeOptions()
chop.add_argument('--disable-gpu')
chop.add_argument('--no-sandbox')
driver = webdriver.Chrome(executable_path='your chrome driver path', chrome_options = chop)
driver.implicitly_wait(15)

driver.get(url)
image_cls = driver.find_element_by_class_name('tb')
image_url = image_cls.find_element_by_tag_name('a').find_element_by_tag_name('img').get_attribute('src') image_data = urllib.urlopen(image_url)
image_file = io.BytesIO(image_data.read())
im = Image.open(image_file)
im.save(DL + '/' + kw + ' .jpg')

driver.quit()

 

結果

これで同フォルダ内に道後温泉の検索結果の1枚目がDLされるはずです。

※ヘッドレスモードではないので、ブラウザが立ち上がって閉じる動作を見れます!

 

要素の取り出しがタグやクラス名なのですが、XPATHでもできます。

ちなみにImageあたりのImportですが、Python2だとちょっと手間取ったりします。

 

これらについては気が向いたらやっていきたいです。

Pythonで収集したデータを小規模フレームワーク「Flask」で画面表示させてみた。

今回は、Pythonの小規模フレームワーク「Flask」をいじってみました。

フレームワークも沢山あるようで、有名どころは「Django」「Bottle」とかですね。

 

今回なぜ「Flask」かというのはなんとなく目に入ったから。

 

使用した言語などの情報は以下。

言語;Python3

フレームワーク:Flask

その他:HTML・CSS

 

結果からだします。

それらしい画面表示ができました!

f:id:adweallab:20170523224409p:plain

Pythonで動いています!

色々なボタンがありますが、ブラフなので実際にクリックできるのは2つ程度…

 

今回はこれだけです・・・とりあえず動いた程度。

次回はFlaskの動作、表示プログラム(HTMLとか、そこらへんの構成とか)を展開していきたいと想います。

 

本日の備忘録として。

それでは。

クラウドファンディングサイト「Readyfor」での支援金額上位プロジェクト(2018年1月8日時点)

順位 カテゴリー プロジェクト名 支援金額 パトロン
1位 地域 赤ちゃんを虐待死から救う「赤ちゃん縁組」事業を立ち上げたい! 29,595,000円 1,391人
2位 社会にいいこと 足を失った人々が「走る」ことへ一歩を踏み出せる場を創りたい! 17,533,000円 631人
3位 チャレンジ まずは知ることから!リディラバ・大人のための学校を実現する! 14,537,000円 647人
4位 チャレンジ 行方不明の星たちを探すカギに遂に辿り着く。銀河誕生の謎に迫る 12,303,000円 259人
5位 アート 佐藤雅彦研究室/表現手法の探求 短編映画群 "filmlet C” 製作 11,015,000円 302人
6位 アート 伝説のバンドROGUE主催の音楽フェスGBGB 感動フィナーレを映像化 10,977,000円 514人
7位 ものづくり プロアングラー川村光大郎が求める最高のルアーを作りだします! 10,660,000円 621人
8位 地域 陸前高田市の空っぽの図書室を本でいっぱいにしようプロジェクト 8,245,000円 862人
9位 社会にいいこと いじめ、虐待、貧困等で悩む子どもたちと支援団体を繋ぎたい 8,022,000円 374人
10位 社会にいいこと 28年間仙台市の親子を支え続けた無認可保育園を守り継ぎたい! 7,569,000円 364人

クラウドファンディングサイト「Makuake」での支援金額上位プロジェクト(2018年1月8日時点)

順位 カテゴリー プロジェクト名 支援金額 パトロン
1位 プロダクト UMPCを忘れられないあなたへ 超小型パソコン『GPD Pocket』を日本でも 97,191,360円 1,478人
2位 プロダクト 小さなボディにフルオーケストラ。Hi-Fiサウンドの完全ワイヤレスイヤホンAir 94,474,700円 5,095人
3位 プロダクト GODJ Plus 世界初!A4サイズのクラブハウス。スピーカー付きDJシステム 53,037,600円 1,292人
4位 プロダクト PCゲーマーへ朗報!コントローラ付ゲーム専用モバイルPC<GPD WIN>上陸! 48,863,600円 1,232人
5位 プロダクト au INFOBARがトランスフォーマーに。携帯電話型変形フィギュアを限定販売! 32,308,200円 3,535人
6位 スタートアップ 世界一のメンズフェイシャルエステを造り、「日本の男はカッコいい!」未来を創る 31,396,500円 243人
7位 プロダクト あなたの夢が今、カタチになる。至高の3DプリンターMAESTRO 限定先行販売! 29,766,960円 156人
8位 地域活性化 記念館最後の年、2017年慶應連合三田会大会を盛り上げよう!【楽々eチケット】 29,257,050円 3,002人
9位 プロダクト メガネにつけてウインクで撮影。世界最速のウェアラブルカメラ「BLINCAM」 26,438,000円 1,323人
10位 プロダクト 世界に一つのオーガニック腕時計「アバテルノ」を日本に広めたい! 23,684,120円 908人

クラウドファンディングサイト「CAMPFIRE」での支援金額上位プロジェクト(2018年1月8日時点)

順位 カテゴリー プロジェクト名 支援金額 パトロン
1位 アート・写真 キングコング西野の個展『えんとつ町のプペル展』を入場無料で開催したい! 46,373,152円 6,257人
2位 アニメ・漫画 山本寛オリジナル作品「薄暮」アニメ制作プロジェクト 21,036,500円 1,225人
3位 チャレンジ 江戸時代からの町並みが残る重伝建の有松で築100年の空き家をカフェに再生します! 5,066,000円 205人
4位 音楽 milktub結成25周年記念ライブDVD「M25-TOKYO」製作プロジェクト 4,350,696円 455人
5位 アート・写真 【pixiv祭】開催!メインモニュメントの「イラストやぐら」をみんなでつくろう! 4,166,500円 76人
6位 音楽 中野の駅前広場で屋外DJイベント「Re:animation 7」を開催する! 3,737,054円 504人
7位 音楽 お花アイドル「hanarichu」3rdシーズン 〜かわいい花娘には旅をさせよ〜 3,316,987円 327人
8位 音楽 HEREニューシングル『タイアップは君だ』PV制作ロック先行投資プロジェクト 2,635,000円 161人
9位 ソーシャルグッド 飯舘村の卒業生とその家族… ばらばらになってしまった村民… みーんなで最高の卒業式を! 2,616,335円 271人
10位 プロダクト 世界最小!iPhone用スタビライザーで美しい動画を撮ろう!! 2,522,567円 264人

Google Spread Shees(GAS)でメニューバーをカスタマイズして追加

Google Spread Sheetのメニューバーへの追加したいと思います。

 

ヘルプの隣にボタンを追加。

f:id:adweallab:20171022141144p:plain

 

スクリプトはこんな感じ。

function onOpen() {
 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 var entries = [
  {name : "処理1" , functionName : "getData1"},
  {name : "処理2" , functionName : "getData2"},
 ];
 spreadsheet.addMenu("カスタマイズメニュー", entries);

}

function getData1() {
 // 何らかの処理
}

function getData2() {
 // 何らかの処理
}

 

それからスクリプトで「onOpen」を実行してみて下さい。

 

メニューバーに追加されます。

 

押下するとスクリプトを走らせたりすることができます。

 

f:id:adweallab:20171022141831p:plain

Google Spread Shees(GAS)でアメブロの記事一覧を取得

GASで個人の方のアメブロ記事一覧を取得してみました。

 

ページをベタ打ちしているので、下記のロジックだと最新1ページのみの取得ができます。

 

これでタイトルを取得できます。

結果としては、スプレッドシート上に書かれる仕様にしています。

 

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(シート名);

 

var blog1 = 'https://ameblo.jp/アメブロID/entrylist';
var fin = '.html';
var regexp1 = /<h1>([\s\S]*?)<\/h1>/gi;

 

function myFunction() {

 var response = UrlFetchApp.fetch(blog1 + fin);
 var result = [];
 for (var i in elements1) {
  var doc = XmlService.parse(elements1[i]);
  var root = doc.getRootElement();
  result.push({
   title: root.getValue().replace('\n', ''),
  })
 }
 var wrt = 2;
 for (var j in result) {
  sheet.getRange(wrt, 1).setValue(wrt-1);
  sheet.getRange(wrt, 2).setValue(result[j]['title']);
  wrt++;
 }
}

 

プログラム的な話をすると、

HTML文をパースした後に正規表現で必要な箇所を取り出して、書き込む仕様です。

 

ページがたくさんある場合は、URL部分を動的にしたりで解決できるかと。

作成日、いいね、コメント数、リブログ数なども取れそう。

 

 

Pythonで国土交通省のAPIを使って市区町村情報を取得

全国の都道府県を取得したいと思います。

 

総務省などでもあるようなのですが、今回は使える国土交通省の土地総合情報システムのAPIを使って取得する。

こちらの2です。

API操作説明 | 国土交通省 土地総合情報システム

 

特にトークンを発行する必要もないので便利。

都道府県コード「01」は北海道。

 

http://www.land.mlit.go.jp/webland/api/CitySearch?area=01

 

これで北海道の市区町村情報が取得できますね。

 

JSONなので、これをPythonを使って整形します。

 

Importはこれですかね。

import json
import urllib2

 

ソースとしてはこんなもんですかね。

「area=XX」ってところを変えてみてください。

 

 url = 'http://www.land.mlit.go.jp/webland/api/CitySearch?area=01'

 try:

  data = urllib2.urlopen(url)

  data = json.loads(data.read())

  data = data['data']

  for i in xrange(len(data)):

   print data[i]['name']

 except urllib2.HTTPError, e:

  print(e.code)

  print(e.reason)

 except urllib2.URLError, e:

  print(e.reason)

 

これで市区町村情報を取得できます。

Pythonで国土交通省のAPIを使って市区町村情報を取得

全国の都道府県を取得したいと思います。

 

総務省などでもあるようなのですが、今回は使える国土交通省の土地総合情報システムのAPIを使って取得する。

こちらの2です。

API操作説明 | 国土交通省 土地総合情報システム

 

特にトークンを発行する必要もないので便利。

都道府県コード「01」は北海道。

 

http://www.land.mlit.go.jp/webland/api/CitySearch?area=01

 

これで北海道の市区町村情報が取得できますね。

 

JSONなので、これをPythonを使って整形します。

 

Importはこれですかね。

import json
import urllib2

 

ソースとしてはこんなもんですかね。

「area=XX」ってところを変えてみてください。

 

 url = 'http://www.land.mlit.go.jp/webland/api/CitySearch?area=01'

 try:

  data = urllib2.urlopen(url)

  data = json.loads(data.read())

  data = data['data']

  for i in xrange(len(data)):

   print data[i]['name']

 except urllib2.HTTPError, e:

  print(e.code)

  print(e.reason)

 except urllib2.URLError, e:

  print(e.reason)

 

これで市区町村情報を取得できます。