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

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

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)

 

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

娯楽メディア

こんにちは。


お久しぶりの投稿です。

今回はシステムの話ではなく、こらから目指していきたい、今やっていることを記録したいと思ってます。


現在「ともいきマガジン」という旅日記・旅案内のサイトを作成しています。 


「ともいきマガジン」は、日本各地の郷土、資料、観光資源の共有から歴史を探り、個々人の現在を豊かにする為の娯楽メディアにしたいと考えています。


さらには、各自治体の様々な情報を集約し、共有、連携を目指すことでインターネット内での連合が組めるのではないかと思うのです。


下記の流れでブログやnoteに記録をしていきたいと思います。


「ともいきマガジン」の狙い

「ともいきマガジン」の現在

「ともいきマガジン」のこれから


ともいき旅マガジン- TOMOIKI -https://synonym.tokyo

Python&BeautifulSoup&PhantomJS&SeleniumでJSレンダリングして情報を取得してみました。

どうもです。

 

クラウドファンディングサイトをクローリングする上で、JavaScriptで構成されている内容を取得しなければいけなくなり、レンダリング後にHTML情報を取得してみました。

 

対象:

https://www.makuake.com/project/kumamoto_nebutamatsuri/communication/

こちらのサイトの活動報告(今回はタイトルだけ)

 

使用ツール:

Python

◉ BeautifulSoup

◉ PhantomJS

◉ Selenium

 

ソース

from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.PhantomJS()

driver.get("https://www.makuake.com/project/kumamoto_nebutamatsuri/communication/")

time.sleep(5)

html = driver.page_source

bs = BeautifulSoup(html, "html.parser")
titles = bs.find_all('span', 'owner-post__title')
for title in titles:
print title.text

driver.quit()

 

結果

届きました~~(^^♪
くまもと情報タウン紙
笑顔が素敵なスタッフでした!
少しずつ、準備は進んでいます♫

 

意外と簡単にできました。

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

www.yoheim.net

 

Pythonを動かせる環境があればできます。

URL変えれば色々取れるかと思いますが、今のままだと報告がゼロ件だと落ちそう?笑

 

 

ご指摘あれば教えてください^^

それでは。

 


 

Twitterやっているので宜しくお願い致します。

twitter.com

シェルスクリプトで、設定ファイル(Config)を読み込んでMySQLへの接続プログラム

備忘録です。

 

シェルスクリプトでの備忘録を残します。

 

ディレクトリ構成】

.

└── sh

   ├── mysqConf.conf

   └── mysqlConnect2.sh

 

mysqConf.conf内 】

USER=root

 

【 mysqlConnect2.sh内 】

./mysqlConf.conf
mysql -u $USER

 

【 結果について 】

この場合、パスワード指定をしていない場合に接続成功

 

パスワード情報も設定ファイル(拡張子をconfにしてわかりやすく!)に書き込めたり出来ますので、試してみてくださいね。

 


元職業プログラマ・エンジニアのMiyamoto

地域、クラウドファンディング、都市伝説、AI、人工知能、宇宙に興味があります。

Twitterやっているので宜しくお願い致します。

twitter.com

シェルスクリプトで、MySQLへの接続プログラム

備忘録です。

 

シェルスクリプトでの備忘録を残します。

 

【 mysqlConnect.sh内 】

mysql -u root -p

 

【 結果について 】

パスワード指定しているのでパスワード問い合わせが来る
この問い合わせをなくすには、
・オプションのpを消す(パスワード設定していない場合)
・「mysql -u root -pAAA」と記載するとよい(AAAというパスワードの場合)

 

次回はConfigファイルよ読み込んで接続させようか。

 


元職業プログラマ・エンジニアのMiyamoto

地域、クラウドファンディング、都市伝説、AI、人工知能、宇宙に興味があります。

Twitterやっているので宜しくお願い致します。

twitter.com

シェルスクリプトで、指定ディレクトリの情報出力プログラム

備忘録です。

 

シェルスクリプトでの備忘録を残します。

 

ディレクトリ構成】

.

└── sh

   ├── input

   │  ├── 1.csv

   │  ├── 2.csv

   │  ├── 3.csv

   │  ├── 4.csv

   │  └── 5.csv

   └── run.sh

 

【 run.sh内 】

dir=$(cd $(dirname $0) && pwd)

cd $dir

files='./input/*.csv'

for filepath in $files; do

# 1つ目
echo $filepath
 # 2つ目
echo ${filepath%.*}
 # 3つ目
echo $(basename ${filepath%.*})

done

 

【 結果について 】

1つ目の表示:相対パス×拡張子付きのファイル名
2つ目の表示:相対パス×拡張子なしのファイル名
3つ目の表示:拡張子なしのファイル名

 

最初のdir指定はcrontabでも動かせるようにする為だったり。。。

まだ色々できそうですが、今回はこのくらいで。

 


元職業プログラマ・エンジニアのMiyamoto

地域、クラウドファンディング、都市伝説、AI、人工知能、宇宙に興味があります。

Twitterやっているので宜しくお願い致します。

twitter.com

HTMLでJavaScriptを呼び出して使う備忘録

備忘録です。

 

JavaScriptの呼び出し方を掲載します。

 

パターン1:インラインスクリプトと言って、HTML上に記載

パターン2:外部スクリプトと言って、JavaScriptファイルを呼び出す(一般的)

 

【 パターン1 】

 index.html

<hrml>
<head>
<title>HTMLの表示テスト</title>
</head>
<body>
<p id="miyamoto">元職業エンジニア!</p>
<script type="text/javascript">
  setInterval("miyamoto.style.opacity^=1",100)
</script>
</body>
</hrml>

 

【 パターン2 】

index2.html

<hrml>
<head>
<title>HTMLの表示テスト</title>
</head>
<body>
<p id="miyamoto">元職業エンジニア!</p>
<script type="text/javascript" src="miyamoto.js"></script>
</body>
</hrml> 

miyamoto.js

setInterval("miyamoto.style.opacity^=1",100)

 

うざいくらい点滅させてます。

 

ちなみにJavaScriptは、Ajaxとか、アプリ開発ができたり、ブラウザ上で試したり、動かせるWEBサービスなんかもあって面白いと思います。

 

とにかく色々できるんです。

このJavaScriptが生まれてからWEBが変わったのもうなずけます。

 


元職業プログラマ・エンジニアのMiyamoto

地域、クラウドファンディング、都市伝説、AI、人工知能、宇宙に興味があります。

Twitterやっているので宜しくお願い致します。

twitter.com

HTMLでCSS(スタイルシート)を呼び出して使う備忘録

備忘録です。

 

CSSの呼び出し方を掲載します。

 

パターン1:HTML文上にStyleタグを挿入

パターン2:特定タグにStyleタグで個別挿入

パターン3:CSSファイルを別個に作って呼び出す(一般的)

 

【 パターン1 】

 index.html

<hrml>
<head>
<title>HTMLの表示テスト</title>
<style type="text/css">
<!--
p {color:red; line-height:1.5;}
-->
</style>
</head>
<body>
ここは黒で<br>
<p>ここが赤になるよ!</p>
</body>
</hrml>

 

【 パターン2 】

index2.html

<hrml>
<head>
<meta name="Content-Style-Type" content="text/css">
<title>HTMLの表示テスト</title>
</head>
<body>
ここは黒で<br>
<p style="color:red; line-height:1.5;">ここが赤になるよ!</p>
</body>
</hrml>

 

【 パターン3 】

index3.html 

<hrml>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<title>HTMLの表示テスト</title>
</head>
<body>
ここは黒で<br>
<p>ここが赤になるよ!</p>
</body>
</hrml>

 

style.css 

p {
color:red; line-height:1.5;
}

 

結果は全て同じ。

 


元職業プログラマ・エンジニアのMiyamoto

地域、クラウドファンディング、都市伝説、AI、人工知能、宇宙に興味があります。

Twitterやっているので宜しくお願い致します。

twitter.com

Macのターミナルコマンドで、ZIPファイル解凍→解凍した複数ファイルを全て結合

備忘録です。

 

Macのコマンドで備忘録を残します。

 

ディレクトリ構成】

.

└── test

   ├── test1.zip

   │  ├── test1.csv

   │  └── test2.csv

   └── test2.zip

      ├── test3.csv

      ├── test4.csv

      └── test5.csv

 

中身ですが、

cd,title

1,aaa

 

全てこうなっております。

 

【 ZIPファイル解凍 】

 

unzip "*.zip"

 

CSVファイル結合 】

cat *.csv >> test.csv

 

【 結果表示 】 

cat test.csv

---------------------------------

cd,title
1,aaa
cd,title
1,aaa
cd,title
1,aaa
cd,title
1,aaa
cd,title
1,aaa

 


元職業プログラマ・エンジニアのMiyamoto

地域、クラウドファンディング、都市伝説、AI、人工知能、宇宙に興味があります。

Twitterやっているので宜しくお願い致します。

twitter.com

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

どーもです。

なんちゃってエンジニアです。

元職業エンジニア・プログラマの人工知能と未来の道楽日記

 

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

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

 

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

 

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

言語;Python3

フレームワーク:Flask

その他:HTML・CSS

 

結果からだします。

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

Pythonの小規模フレームワーク「Flask」をいじったHTML画像

Pythonで動いています!

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

 

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

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

 

本日の備忘録として。

それでは。

 


元職業プログラマ・エンジニアのMiyamoto

地域、クラウドファンディング、都市伝説、AI、人工知能、宇宙に興味があります。

Twitterやっているので宜しくお願い致します。

twitter.com

Pythonでクラウドファンディングサイトからカテゴリ取得プログラム(データベース編その3)

どうもです。

なんちゃってエンジニアです。

元職業エンジニア・プログラマの人工知能と未来の道楽日記

 

今回は、クラウドファンディングサイト(Makuake、Readyfor?、CAMPFIRE)から取得した各プロジェクトの詳細情報をデータベースに格納する際の設計をしたものを公開。
 

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

 

データベース;MySQL5.7

 

以下、データベースの設計と実装です。

 

テーブル:cw_project

項目 キー 備考
ID 1:Makuake
2:Campfire
3:Readyfor
NO プロジェクトNo
GETDATE 取得日
PERSON  

実行者

TARGET  

目標金額

GET  

支援金額

GET  

パトロン

STATUS  

ステータス

(終了、残日数など)

REGIST_DATE

  取得したタイムタンプ

 

属性なり他の設定については、SQL文を掲載するのでそれを見てください。

全体的に結構適当です…

 

SQLでテーブル作成文

①まずは、テーブルが存在していればテーブルを削除
DROP TABLE IF EXISTS `cw_detail`;

②テーブル作成
CREATE TABLE `cw_detail` (
`ID` VARCHAR(5) NOT NULL,
`NO` BIGINT(100) NOT NULL,
`GETDATE` DATE NOT NULL,
`PERSON` VARCHAR(30) NOT NULL,
`TARGET` BIGINT(10) NOT NULL,
`GET` BIGINT(10) NOT NULL,
`PATRON` BIGINT(10) NOT NULL,
`STATUS` VARCHAR(30) NOT NULL,
`REGIST_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`, `NO`, `GETDATE`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

各サイトのプロジェクトの判別は、IDとNOで区別できるかと思います。

重要な

・実行者

・目標金額

・支援金額

・パトロン数

・ステータス 

を差分収集していく想定をしています。

 

収集自体は、週に1回ペース程度かな?

 

ご指摘あれば教えてください^^

それでは。

 


元職業プログラマ・エンジニアのMiyamoto

地域、クラウドファンディング、都市伝説、AI、人工知能、宇宙に興味があります。

Twitterやっているので宜しくお願い致します。

twitter.com

データ解析ライブラリのPython・Pandasをいじってみた。

どうもです。

なんちゃってエンジニアです。

元職業エンジニア・プログラマの人工知能と未来の道楽日記

 

今回は、Pythonのデータ解析で利用されるPandasについて動かしてみたので、備忘録として掲載します。

 

やったことですが、私のツイートデータ(3か月)のツイートインプレッションが100以上で、かつ、その最小値・最大値・合計値を取る、簡単なプログラムです。

 

下記も見ていますので参考まで。

qiita.com

qiita.com

 

前提:

3ファイルを用意しています。

 ・tweet_activity_metrics_startupimyme_20170201_20170301_ja.csv

 ・tweet_activity_metrics_startupimyme_20170301_20170401_ja.csv

 ・tweet_activity_metrics_startupimyme_20170401_20170501_ja.csv

 

前文(Import文)

# -*- coding: utf-8 -*-

import glob
import numpy as np
import pandas as pd

 

取得プログラム:

1ファイルずつ取得をして解析。

class GetPdTest:

def pdFrame(self):
files = glob.glob('./data/tweet*.csv')
for file in files:
print('-----------------------------')
print('取得月 : ' + file.split("_")[4][:6])
print('*****************************')
data = pd.read_csv(file)
df = pd.DataFrame({
'ID' : data['ツイートID'],
'post' : data['時間'],
'Imp' : data['インプレッション'],
'Eng' : data['エンゲージメント'],
'Good' : data['いいね'],
'Retweet' : data['リツイート']
})
print('最小値 : ' + str(df.query("Imp >= 100")["Imp"].min()))
print('最大値 : ' + str(df.query("Imp >= 100")["Imp"].max()))
print('合計値 : ' + str(df.query("Imp >= 100")["Imp"].sum()))

if __name__ == '__main__':

base = GetPdTest()
base.pdFrame()

 

結果:

-----------------------------
取得月 : 201702
*****************************
最小値 : 207.0
最大値 : 207.0
合計値 : 207.0
-----------------------------
取得月 : 201703
*****************************
最小値 : 123.0
最大値 : 890.0
合計値 : 1611.0
-----------------------------
取得月 : 201704
*****************************
最小値 : 114.0
最大値 : 1993.0
合計値 : 5288.0

 

こんな感じになりました。

今回は本当の動作検証程度で、データ解析における初歩にも満たないことです。

これから励んでいきたいと思います。

 

それでは。

 


元職業プログラマ・エンジニアのMiyamoto

地域、クラウドファンディング、都市伝説、AI、人工知能、宇宙に興味があります。

Twitterやっているので宜しくお願い致します。

twitter.com

Pythonでクラウドファンディングサイトからカテゴリ取得プログラム(データベース編その2)

こんにちは。

なんちゃってエンジニアです。

元職業エンジニア・プログラマの人工知能と未来の道楽日記

 

今回は、クラウドファンディングサイト(Makuake、Readyfor?、CAMPFIRE)から取得した各プロジェクトをデータベースに格納する際の設計をしたものを公開。

 

「Makuake」さんのカテゴリ取得はこちら↓

adweallab.hatenablog.com

 

「CAMPFIRE」さんのカテゴリ取得はこちら↓

adweallab.hatenablog.com

 

「Readyfor?」さんのカテゴリ取得はこちら↓

adweallab.hatenablog.com
 

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

 

データベース;MySQL5.7

 

以下、データベースの設計と実装です。

 

テーブル:cw_project

項目 キー 備考
ID 1:Makuake
2:Campfire
3:Readyfor
NO プロジェクトNo
CATEGORY  

カテゴリ名

NAME  

プロジェクト名

URL  

プロジェクトURL

REGIST_DATE

  取得したタイムタンプ

 

属性なり他の設定については、SQL文を掲載するのでそれを見てください。

全体的に結構適当です…

 

SQLでテーブル作成文

①まずは、テーブルが存在していればテーブルを削除
DROP TABLE IF EXISTS `cw_project`;

②テーブル作成
CREATE TABLE `cw_project` (
`ID` VARCHAR(5) NOT NULL,
`NO` BIGINT(100) NOT NULL,
`CATEGORY` VARCHAR(50) NOT NULL,
`NAME` VARCHAR(200) NOT NULL,
`URL` TEXT NOT NULL,
`REGIST_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`, `NO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

NOの扱いって…どうなんでしょう?修正有ると思います!

それとカテゴリ名についてはそのまま日本語文字を入れているので、データ気にするのであれば、コード管理が望ましいですね。

 

ご指摘あれば教えてください^^

それでは。

 


元職業プログラマ・エンジニアのMiyamoto

地域、クラウドファンディング、都市伝説、AI、人工知能、宇宙に興味があります。

Twitterやっているので宜しくお願い致します。

twitter.com