Processing Osc 文字化け
PythonでTwitter APIからデータ取得したのにProcessing にOSC通信したら文字化けしたので,解消したかったが思いのほか記事が少なかった.
http://mirror.boy.jp/?p=809
参考にしたのはここ↑
import oscP5.*; import netP5.*; import java.io.UnsupportedEncodingException; //ここ初めて使った.知らなかった. OscP5 oscP5; NetAddress myRemoteLocation; int receivePort = ????; String sendIP = "????"; String tweet = ""; void setup(){ size(1000, 1000); background(255); oscP5 = new OscP5(this,receivePort); myRemoteLocation = new NetAddress(sendIP,sendPort); } void draw(){ background(255); fill(0); text(tweet, 0, 50); } void oscEvent(OscMessage theOscMessage) { print("### received an osc message."); println(" addrpattern: "+theOscMessage.addrPattern()); if(theOscMessage.checkAddrPattern("/tweet")==true) { byte[] bytes = theOscMessage.getBytes(); try { tweet = new String(bytes, "UTF-8"); String typeTagStr = theOscMessage.typetag(); tweet = tweet.substring(tweet.indexOf(typeTagStr) + typeTagStr.length()); println("Tweet:"+tweet); } catch(UnsupportedEncodingException e) { e.printStackTrace(); } } }
Python Twitter Api RT 分ける
この記事には誤りがあります.この方法でもできますが….
上記記事でほぼ解決していたのですが,そのユーザが投稿したわけではない(そのユーザがRTした)ツイートがまざるのがいやだったので,少し調べました.
どうやら各ツイートのretweeted_statuの存在の有無を調べるらしいのですが,
tweet["retweeted_statu"] == {} tweet["retweeted_statu"] is None
両方ダメだったので,少し悩みました.いや言われればそのまんまなんですけどね.
というわけで上記記事に完全にマウントして,streamからツイートを取得しましょう.ついでにハッシュタグとURLも消しました.すっきり!
import requests import json from requests_oauthlib import OAuth1 import re consumer_key = "bokuha" consumer_secret = "pikachu" access_token = "ga" access_secret = "daisuke!" url = "https://stream.twitter.com/1.1/statuses/filter.json" auth = OAuth1(consumer_key, consumer_secret, access_token, access_secret) r = requests.post(url, auth=auth, stream=True, data={"track":"pokemon"}) if r.status_code == 200: print ("connect succeed!") else: print ("Error: %d" % r.status_code) for line in r.iter_lines(): stream = line.decode("utf-8") try: find=json.loads(stream) #読み込み print("------------------------------") try: #ここでRTが判断している.関数化しようかとも思ったが,そこまで複雑じゃないので isRtweeted = not find["retweeted_status"] == {} except KeyError: isRtweeted = False if isRtweeted: print(find["user"]["name"] + "がRTしました") else: t1 = re.sub(r"(\s*https?|ftp)(:\/\/[-_\.!~*\'()a-zA-Z0-9;\/?:\@&=\+\$,%#]+)", "" ,find["text"]) #URLを削除 t2 = re.sub(r"(\s*#\S+\s*)", "", t1) #ハッシュタグを削除 print(find["user"]["name"], t2) print(find["entities"]["hashtags"]) except json.decoder.JSONDecodeError: pass except: print ("unknown error!") pass #たまによくわからないエラーが出るらしいです.
Latex,Excelから表を生成(色を付ける),png画像
かなり便利なんだけど,コンパイルしたら画像が全部表示されなくなった.xcolorとcolorの競合かなと思ったんだけど,理由を特定している暇がないので
\documentclass[uplatex,report]{jsbook} \usepackage{thesis} \usepackage[dvipdfmx]{color} \usepackage[dvipdfmx]{graphicx} \usepackage[table,xcdraw]{xcolor} \usepackage[dvipdfmx]{hyperref}
を
\documentclass[uplatex,report,dvipdfmx]{jsbook} \usepackage{thesis} \usepackage{color} \usepackage{graphicx} \usepackage[table,xcdraw]{xcolor} \usepackage{hyperref}
に直した.みんなに届けLaTex!
Chrome 開き続ける
また何の需要もないプログラムを書いてしまった.
Chromeを閉じても閉じても開き続けるプログラム.
既存のタブが開いていたりすると落ちる仕様なのは,解決したい.
あと.Ctrl + vは効く癖にCtrl + tが効かないのが納得いかない.これ解決策知っている人いたら教えてください
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.common.exceptions import WebDriverException import time #起動 driver = webdriver.Chrome("path(ここ書き換えてね)\chromedriver.exe") #ここフォルダーまででいいと思ったのになあ #遷移 driver.get("https://www.google.co.jp") #body要素を選択 element = driver.find_element_by_tag_name("body") while True: try: element = driver.find_element_by_tag_name("body") print(driver.current_url) time.sleep(5) except WebDriverException: driver = webdriver.Chrome("path\chromedriver.exe") driver.get("https://www.google.co.jp")
Processing 文字 画像化
まったくなんの需要もない自己満足な記事
こういう画像を作りたい.作ってどうするの?みたいなのは次回記事にします.
int w; int h; PGraphics[] pg; int numArray; void setup(){ size(500, 500); w = width; h = height; PFont f = loadFont("RictyDiminishedDiscord-Regular-48.vlw"); numArray = 127 - 32; pg = new PGraphics[numArray]; background(255); for(int i = 0; i < numArray; i++){ pg[i] = createGraphics(w, h); pg[i].beginDraw(); pg[i].background(255); pg[i].fill(0); pg[i].textFont(f, 200); pg[i].textAlign(CENTER, CENTER); pg[i].text(str(char(i + 32)), w/2, h/2); String filename = str(i); if(filename.length() == 1) filename = "0" + filename; pg[i].save("images2/" + filename + ".png"); pg[i].endDraw(); } }
画像の配列ができました.やったね!
python line bot imagemap 画像送信
pythonでLINE botを作っていますが,
github.com
ここでだいたいわかります.しかし画像の送信とimagemapはサンプルがないので実装してみます.
画像送信
from linebot.models import ImageSendMessage def make_image_message(): messages = ImageSendMessage( original_content_url="https://hogehoge.jpg", #JPEG 最大画像サイズ:240×240 最大ファイルサイズ:1MB(注意:仕様が変わっていた) preview_image_url="https://hogehoge-mini.jpg" #JPEG 最大画像サイズ:1024×1024 最大ファイルサイズ:1MB(注意:仕様が変わっていた) ) return messages
これむっちゃ面白いんですけどプレビューとタップして表示される画像別になるんですよ!
注意:画像サイズの制限はもう少し大きく,jpgに限定されない.ただし.preview_image_urlにgifを指定しても,反映されない(正確にはアニメーションgifは動かない)ので注意
これを
messages = make_image_messages() line_bot_api.reply_message( event.reply_token, messages)
的にすればリプライできます.
imagemap
画像をボタン化できます.(画像は用意できれば用意します.)これの何がいいかというと
- 画像を見れることによる直感的操作
- 選択肢を増やせる(最大50)
from linebot.models import ImagemapSendMessage, BaseSize, ImagemapAction, URIImagemapAction, MessageImagemapAction, ImagemapArea def make_imagemap(): messages = ImagemapSendMessage( base_url='https://huhahaha/pikach/kawaii/', alt_text='this is an imagemap', base_size=BaseSize(width=1040, height=1040), actions=[ URIImagemapAction( link_uri='https://example.com/', area=ImagemapArea( x=0, y=0, width=520, height=1040 ) ), MessageImagemapAction( text='hello', area=ImagemapArea( x=520, y=0, width=520, height=1040 ) ) ] ) return messages
画像の保存の仕方に一癖あってけっこう悩みました.
https://huhahaha/pikach/kawaii/
以下に
幅:240px、300px、460px、700px、1040px
の画像を配置します.(横幅が指定であれば,高さは関係ない.また高さに合わせて,heightも変える)
なのですが,保存した画像の拡張子は**取ります**
(どっかで拡張子指定できるようにすればいいのに…)
参考にした
python win32client speak
import win32com.client as wincl
に関する記事が少なすぎるので,いくつかまとめます.
まず
speak.Speak("Hello World", i)
のiについてです
for n in range(2): speak.Speak("Hello World" + str(n), i) sleep(1) print(n)
で検証します.
- i = 0,2
これは
読み上げ->1秒待つ->print出力->読み上げ->1秒待つ->print出力となります
- i = 1
これは
読み上げと同時に一秒待ってprint出力(読み上げの途中で出力される)->出力から1秒後にprintされる.その間読み上げている(ただし,読み上げが重なることはない)
- i = 3
最初の文章の読み上げを1秒間行う->print出力->二行目を読み上げ(一行目は最後まで読み上げない)->一秒後にprint出力
for n in range(2): speak.Speak("Hello World" + str(n), i) sleep(1) speak2.Speak("Wow!", i) print(n)
- i = 1
Hello World 1->1->2->Hello World 2->Wow->Wow
になります.
どうなっているのかよくわからない.