読者です 読者をやめる 読者になる 読者になる

AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

ヤフー天気予報を取得して、結月ゆかりさんに天気予報してもらう

url="http://rss.weather.yahoo.co.jp/rss/days/4410.xml"

ここからRSSを取得して、
得られた

【 21日(木) 東京(東京) 】 晴後曇 - 10℃/0℃ - Yahoo!天気・災害

正規表現で整形して

 21日木曜日 東京の天気は  晴後曇 最高気温9℃最低気温0℃の予想です 

に変化させてから、結月ゆかりさんに発話してもらう。
これはあくまでサンプルですが、ニュースなどもcronで定期的に発話させればいい感じになりそうです。
ニコニコ実況なんかもいいかも(高速発話で)


RSS取得と正規表現の整形を追加
あと、クリップボードからペーストする前に、いったん全選択してDELする処理を追加しました。
こうしないと前回の発話テキストが残って追加になるので。

#uselib "user32.dll"

//--------------------------------------
// Win32API関数の記号定数
//--------------------------------------
#func keybd_event "keybd_event" int, int, int, int

#uselib "Kernel32.dll"
    # func lstrcpy                      "lstrcpyA"                      sptr,sptr
    #cfunc GlobalAlloc                  "GlobalAlloc"                   sptr,sptr
    # func GlobalFree                   "GlobalFree"                    sptr
    #cfunc GlobalSize                   "GlobalSize"                    sptr
    #cfunc GlobalLock                   "GlobalLock"                    sptr
    # func GlobalUnlock                 "GlobalUnlock"                  sptr
#uselib "User32.dll"
    #cfunc OpenClipboard                "OpenClipboard"                 sptr
    # func CloseClipboard               "CloseClipboard"
    # func EmptyClipboard               "EmptyClipboard"
    #cfunc GetClipboardData             "GetClipboardData"              sptr
    # func SetClipboardData             "SetClipboardData"              sptr,sptr
    #cfunc IsClipboardFormatAvailable   "IsClipboardFormatAvailable"    sptr

#const CF_TEXT          (1)
#const GHND             ($0042)
#const GMEM_SHARE       ($2000)
#const VK_DEL           (8)
#const VK_F5            (116)
#define VK_CONTROL 0x11
#define KEYEVENTF_KEYUP 2

#include "mod_rss.as"
#include "mod_regexp.as"
	
	speechVoiceroid "ヤフー天気取得中です"
	;	RSSリーダーサンプル
	;
	url="http://rss.weather.yahoo.co.jp/rss/days/4410.xml"
	rssload desc, link, url, 6
	;
	if (stat=1) {
		errorMes "取得に失敗しました。"
		end
	}
	if (stat=2) {
		errorMes "RSSではありません。"
		end
	}
	speechVoiceroid "取得完了"


	temp = desc(2)
	temp = replace(temp,"【","")
	temp = replace(temp,"】","")
	temp = replace(temp,"- Yahoo!天気・災害","")
	temp = replace(temp,"東京(東京)","東京の天気は")
	temp = replace(temp,"((.+))","$1曜日")
	temp = replace(temp,"- ([\-0-9]+)℃","最高気温$1℃")
	temp = replace(temp,"/([\-0-9]+)℃","最低気温$1℃の予想です")
	mes desc(2)
	mes temp
	speechVoiceroid temp
end

#deffunc speechVoiceroid str a
	apiClipSave a
	exec "C:/Program Files (x86)/AHS/VOICEROID+/YukariEX/VOICEROID"
	wait 300
	setShortCutKey 'A'
	setKey VK_DEL
	setShortCutKey 'V'
	setKey VK_F5
	return 0
#deffunc setKey int a
	// 押す
	keybd_event a, 0, 0, 0
	wait 10
	// 離す
	keybd_event a, 0, 2, 0
	wait 10
	return 0
#deffunc setShortCutKey int a
	// 押す
	keybd_event VK_CONTROL, 0, 0, 0
	keybd_event a, 0, 0, 0
	wait 10
	// 離す
	keybd_event a, 0, 2, 0
	keybd_event VK_CONTROL, 0, 2, 0
	wait 10
	return 0

//--------------------------------------
// クリップボードにテキストを設定
//--------------------------------------
#deffunc apiClipSave str _text_,\
    local hMem,\
    local nSize,\
    local pBuff,\
    local dupStr
    nSize=strlen(_text_)+1
    hMem=GlobalAlloc(GHND|GMEM_SHARE,nSize):if(hMem){
        pBuff=GlobalLock(hMem)
        ;文字列型のクローン変数作成
        dupptr dupStr,pBuff,nSize,2
        dupStr=_text_
        GlobalUnlock hMem
        
        if OpenClipboard(hWnd){
            EmptyClipboard
            SetClipboardData CF_TEXT,hMem
            CloseClipboard
            return 1
        }
        GlobalFree hMem
    }
	return 0
#deffunc errorMes str a
	speechVoiceroid a
	mes a
	return 0