[Python] BeautifulSoupによるスクレイピング

$ sudo pip3 install bs4

import requests
from bs4 import BeautifulSoup

response = requests.get('https://paypaymall.yahoo.co.jp/store/*/item/y-hp600-3/')
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.find('title').get_text()
print(title)

$ python3 main.py
年内配送OK カニ かに 蟹 ズワイガニ カニ刺身 かにしゃぶ 殻Wカット生本ズワイ3箱セット カニ8規格 選べる最大3kg かに脚 フルポーション剥身 姿 カニ爪 かに鍋 越前かに問屋ますよね公式ストア – 通販 – PayPayモール

urllibより操作が簡単そうですな

[Python] urllib.requestによるスクレイピング

from urllib import request

response = request.urlopen('https://paypaymall.yahoo.co.jp/store/*/item/y-hp600-3/')
content = response.read()
response.close()
html = content.decode()

title = html.split('<title>')[1].split('</title')[0]
print(title)

$ python3 main.py
年内配送OK カニ かに 蟹 ズワイガニ カニ刺身 かにしゃぶ 殻Wカット生本ズワイ3箱セット カニ8規格 選べる最大3kg かに脚 フルポーション剥身 姿 カニ爪 かに鍋 越前かに問屋ますよね公式ストア – 通販 – PayPayモール

なるほど

Chrome Extensionを自作したい

必要なもの
– js file
– html, css, image
– manifest file

### manifest.json (設定全般)
パッケージ化されてない拡張機能を読み込む で設定する

content.js

window.alert("app opened!");

manifest.json

{
	"name":"sample",
	"version": "1.0.0",
	"manifest_version": 2,
	"description": "sampleChromeExtension",
	"content_scripts": [{
		"matches": ["http://192.168.33.10:8000/test.html"],
		"js": [
			"content.js"
		]
	}]
}

できました

なるほどー 意外と簡単に作れるのね

[Ethereum] Solidityの基礎構文 その1

$ truffle init
$ touch test/practice_test.js

const PracticeContract = artifacts.require("Practice");

contract("Practice", () => {
	it("has been deployed successfully", async() => {
		const practice = await PracticeContract.deployed();
		assert(practice, "contract was not deployed");
	})
})

artifacts.require(“*”) でコンパイル済みのコントラクトを読み込んで操作できる

$ touch contracts/Practice.sol

pragma solidity >= 0.4.0 < 0.7.0;

contract Practice {
	
}

migrationによってcontractがdeployされる
$ touch migrations/2_deploy_practice.js

const PracticeContract = artifacts.require("Practice");

module.exports = function(deployer) {
	deployer.deploy(PracticeContract);
}

contract

pragma solidity >= 0.4.0 < 0.7.0;

contract Practice {

	function hello() external pure returns(string memory) {
		return "Hello, World!";
	}
}

– hello : 関数
– external関数 : practice contactのインターフェイスの一部であり、他のコントラクトから呼び出せるが、コントラクトの中からは呼び出せない。external以外に、internal, public, privateがある。publicは他のコントラクトから呼び出せるし、内部でも呼び出せる。externalをpublicに変更しても結果は同じ。internalとprivateではオブジェクトやthisでは呼び出せない。
– pure, view: コントラクトの変数の状態を変更しない関数 pureはデータを読み込むことも書き込むこともできない viewは読み込むだけ
– memory : 永続ストレージに配置されているものを一切参照しない

なるほど 分解すると分かりやすい

仮想通貨の自動売買

bitflyerのライブラリをpipでインストールします
$ pip3 install pybitflyer

import pybitflyer
import time

api_key = ""
api_secret = ""

api = bitflyer.API(api_key=api_key, api_secret=api_secret)

base_price = api.ticker(product_code="BTC_JPY")["ltp"]
print("bot開始時の価格は"+str(base_price)+"です。")

while True:
	time.sleep(5)
	price_now = api.ticker(product_code="BTC_JPY")["ltp"]
	print("現在のBTCJPYは " + str(price_now) + " です。")
	if base_price*0.95 >= price_now:
		print("bitcoin価格が下落しています。成行きで買い注文を入れます。")
		print("bitflyerのサーバーからの応答は以下です。")
		print(api.sendchildorder(product_code="BTC_JPY", child_order_type="MARKET", side="BUY", size=0.005, minute_to_expire=10000,time_in_force="GTC"))
		base_price = price_now

	elif base_price * 1.05 <= price_now:
		print("bitcoin価格が下落しています。成行きで売り注文を入れます。")
		print("bitflyerのサーバーからの応答は以下です。")
		print(api.sendchildorder(product_code="BTC_JPY", child_order_type="MARKET", side="SELL", size=0.005, minute_to_expire=10000,time_in_force="GTC"))
		base_price = price_now

	else:
		print("bitcoin価格に大きな変動はありません")

なるほど、base_priceとnow_priceで自動注文するのね
でもこれ、上昇相場なら無限に損するし、下落相場でも無限に損するやん
box相場の時のみ儲かるってことか
ここで移動平均線とかも組み合わせるのかな…

なんか色々ロジックがありそうですね。

アルゴリズムトレードとは

FXの場合、MT4を使えばツール上で完結する
MT4のMQLを持ちいる
MT4のバックテストツールで検証できる
そのままMT4で実弾の入った口座にログインして自動取引モードにすると取引できるようになる

lang:filename
void OnTick(void){
if(なにか条件){
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,ALLOW_SLIPPAGE,NULL,Ask+TakeProfit*Point,"comment",Magic,0,Green);
}
}

価格が変動するとOnTick()関数が走るので、その中にメインロジックを書いていく
売り買いの注文は用意されており、OrderSend()は注文を入れる
移動平均線、ボリンジャーバンドなど様々なツール

Rを用いて実装することも
Pythonで機械学習を実装する場合はAPI化するう
他人が作成したアルゴリズムが販売されている
https://www.metatrader4.com/en/signals/overview
https://www.gogojungle.co.jp/

なるほど、まずはMT4の環境構築からか
EAを購入してVPSのwindows環境で動かしている人が多いみたいですね

[OpenCV] モルフォジー変換で白の余白を狭くする

import cv2
import numpy as np

img = cv2.imread('out/result.jpg') 

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# cv2.imwrite("out/gray.jpg", img_gray)

# 二値化
# threshold = 180
# _, img_th = cv2.threshold(gray, threshold, 255, cv2.THRESH_BINARY)
# cv2.imwrite("out/th.jpg", img_th)

# 反転
img_bw = cv2.bitwise_not(gray)
cv2.imwrite("out/bw.jpg", img_bw)

kernel = np.ones((3, 3), np.uint8)

img_ero = cv2.erode(img_bw, kernel, iterations=1)
cv2.imwrite("out/ero.jpg", img_ero)

モルフォジー前

モルフォジー後

iterationsの値を大きくするほど、白の値が狭くなる

反対にcv2.dilate(img_bw, kernel, iterations = 1) として白を白を膨張する事もできる

おおおおおおお
Sugeeeeeeeeeeee

[Python] ファイルの小文字を一括して大文字に変更したい

目的: 4000行ぐらいのテキストファイルの中身を全て小文字から大文字にしたい

まず大文字に変更

text = "train/dr1/fcjf0/si1027.wav";

print(text.upper())

$ python3 main.py
TRAIN/DR1/FCJF0/SI1027.WAV

ファイルを読み込む

with open("file.txt") as f:
	for line in f:
		line = line.rstrip()
		print(line)

uppercaseでファイルに書き込む

file = open('myfile.txt', 'a')

with open("file.txt") as f:
	for line in f:
		line = line.rstrip()
		file.write(line.upper() + "\n") 
		print(line.upper())

TRAIN/DR1/FCJF0/SI1027.WAV
TRAIN/DR1/FCJF0/SI1657.WAV
TRAIN/DR1/FCJF0/SI648.WAV

SincNetっていう音声認識のOSSをgit cloneして動かそうとした際に、timitが必要でunzipしたらフォルダファイルが大文字で、SincNetのプログラムでは小文字で処理してたので、SincNetのプログラムを4000行くらい一括して大文字に変換する必要があった。

うーむ、、、やってみると意外とすぐ出来た

[OpenCV] Pythonで画像の中の物体の個数を数える

画像を用意します

import cv2

image = cv2.imread("img/sweets.jpg")

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

edges = cv2.Canny(gray, 50, 200)

contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

count_objects_image = len(contours)

print(count_objects_image)

$ python3 main.py
232

illustratorなどで作った画像なら正確に抽出できるが、
リアルの写真だと上手く検出できないな…

[RaspberryPI] onvif環境構築

設定ー> Raspberrypi設定->インターフェイス->カメラ->有効

$ vcgencmd get_camera
supported=1 detected=1
$ sudo raspistill -o image.jpg
$ raspivid -f -t 0

$ sudo apt-get install libjson-c3
$ sudo apt-get install insserv

https://qiita.com/lis-hanzomon/items/896342ec1af95d42db26
https://github.com/lis-hanzomon/ONVIF-ClientApp/tree/master/bin

$ sudo apt-get install cmake
$ sudo apt-get install libxml2-dev
$ sudo apt-get install uuid-dev
$ sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev libswresample-dev libswscale-dev
$ sudo apt-get install libjson-c-dev

https://download.videolan.org/pub/contrib/live555/
downloadして解凍、makeします
$ tar zxvf live.2018.02.12.tar.gz
$ cd live
$ ./genMakefiles linux
$ make
$ sudo make install

$ sudo apt-get install flex bison
$ sudo apt-get install libssl-dev

https://ja.osdn.net/projects/sfnet_gsoap2/downloads/gsoap_2.8.117.zip/
$ unzip gsoap_2.8.117.zip
$ cd gsoap-2.8
$ ./configure
$ make
$ sudo make install

$ sudo apt-get install build-essential cmake pkg-config libjpeg-dev libtiff5-dev libjasper-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libfontconfig1-dev libcairo2-dev libgdk-pixbuf2.0-dev libpango1.0-dev libgtk2.0-dev libgtk-3-dev libatlas-base-dev gfortran libhdf5-dev libhdf5-serial-dev libhdf5-103 libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 python3-dev -y
$ pip3 install opencv-contrib-python==4.1.0.25

$ git clone https://github.com/lis-hanzomon/RedBrick.git
$ cd RedBrick
$ cd RedBrick
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install

ラズパイ詳しくなるには、ラズパイメインでやらないと駄目だな