投稿

8月, 2023の投稿を表示しています

X(Twitter)への自動投稿

 X(Twitter)に投稿でもしないと誰も「 まちあてル 」に気づかない。。。 ということでそういう処理を追加 やり方はどこにでも書いてあるので躓くことはなかったが API v1.1とAPI v2の違いに最初気づかずなぜ書き方が違うのか迷ってた。 X(Twitter)の開発者ポータルでアプリ登録する際の APIの利用目的を書くのが大変(そんなに深く考えてないわ) GAEのクーロンスケジュールで実行するのでそれ以外のアクセスは除外 if request . headers . get ( "X-Appengine-Cron" ) is None :     return render_template ( "404.html" ), 404 X(Twitter)アプリ登録で発行されたキーをセット consumer_key = "ABCDEFG" consumer_secret = " ABCDEFG " access_token = " ABCDEFG " access_token_secret = " ABCDEFG " client = tweepy . Client (     consumer_key = consumer_key ,     consumer_secret = consumer_secret ,     access_token = access_token ,     access_token_secret = access_token_secret ) で、送信 client . create_tweet ( text = "ほげほげ " ) GAEでクーロンスケジュールを作成するために cron.yaml cron : - description : "tweet from cron"   target : default   url : /cron   schedule : every day 08:10 として、毎日17:10に投稿されるように定義 gcloud app deploy cron.yaml実行 してクーロンスケジュ

Google App Engineへのデプロイ

 Google App Engineへのデプロイ 「GAE Flask デプロイ」でググった結果、いろいろなやり方が見つかった。 Pythonのバージョンとか結構古い記事だったり、なんかうまくいかないのがあったが 最終的にはGAEのリファレンスを見ながらやってみる。 1.Google Cloud CLIをインストール   Google Cloud CLI インストーラ をダウンロード 2.Google Cloud Consoleでプロジェクトを作成  プロジェクトの作成はこの方法がわかりやすかったので採用 3.デプロイに関係するファイルの用意  .gcloudignore   アップロードする必要のないファイルを列挙  app.yaml   アプリの設定を記載するのだが細かい良し悪しがわからない・・・   最低限runtimeが必要とのことなので   runtime: python310   あとはサンプルを調整 4.phpでgunicornをインストール 5.gcloud init実行  Googleへのログインとか 6.gcloud app deploy実行  リージョン選べと言われたので   asia-northeast1  を選択 なんとかデプロイ成功 gcloud config configurations list で作成済みコンフィグを確認して gcloud config configurations activate hogehoge でアクティブなコンフィグを切り替えできる とかあったけど現段階では関係なかった。   

回答履歴のコピー機能

イメージ
ボタンを押したら回答履歴をコピーさせたかった javascriptで簡単にできると思ったが、めちゃくちゃ手間取った navigator . clipboard . writeText ( res ); で簡単にコピーできるはずだったのに 自分のスマホではコピーされない。なぜ?なぜ? iPhoneのsafariでは制限があるもよう・・・ 自分のスマホはiPhoneだった(結果的によかった) textareaにコピーしたい文字列をセットしてからコピー処理しないといけないらしい コピーしたい文字列はAjaxでサーバーに問い合わせたとして レスポンス返ってからの処理は $ ( '#copyText' ). show (); var el = document . getElementById ( 'copyText' ); el . value = res ; if ( navigator . userAgent . match ( /ipad | ipod | iphone/ i )) {     var oldContentEditable = el . contentEditable ,     oldReadOnly = el . readOnly ,     range = document . createRange ();           el . contentEditable = true ;     el . readOnly = false ;     range . selectNodeContents ( el );         var s = window . getSelection ();     s . removeAllRanges ();     s . addRange ( range );           el . setSelectionRange ( 0 , 999999 );           el . contentEditable = oldContentEditable ;     el . readOnly = oldReadOnly ;     document . execCommand ( 'copy'

回答のチェック処理

イメージ
 Wordleみたいにするのであれば 1.ひらがなで回答してもらう 2.文字ごとの正誤判定 3.結果を返す という流れが必要 回答は で、特に問題ないだろう 市か町か村がわからないと難しすぎるかと思い表記しておく 文字後の正誤判定はいまいちな処理にはなるが 答えと入力されたものをそれぞれ文字ごとの配列にして 比較する方法とする 答えを「kotae_dict」に格納 kotae_dict = {}  index = 1 for str in kotae :      kotae_dict [ index ] = str     index += 1 入力された回答を「answer_dict」に格納 answer_dict = {} index = 1 for ans in answer :     answer_dict [ index ] = { "moji" : ans }     index += 1 入力された回答の文字が答えに使われているかを先にチェック for key in answer_dict :   dic = answer_dict [ key ]     if hiragana .count( dic [ "moji" ]) > 0 :        dic [ "class" ] = "use"     else :         dic [ "class" ] = "notuse"     answer_dict [ key ] = dic まず、どこかに使われている文字なら「use」のフラグを立てて どこにも使われていない文字なら「notuse」のフラグを立てる 次に場所の一致をチェック for key in answer_dict :     dic = answer_dict [ key ]     if len ( hiragana_dict ) >= key :         if dic [ "moji" ] == hiragana_dict [ key ]:             dic

五十音のボタンを並べる

イメージ
 入力用に五十音のボタンを並べたい htmlに書けばいいけどめんどくさいので処理を考える aiueobutton.py  とりあえず五十音の配列を作ってみる  五十音の文字列でもいいけど後で見難いからね aiueo = [ "あいうえお" ,           "かきくけこ" ,           "さしすせそ" ,           "たちつてと" ,           "なにぬねの" ,           "はひふへほ" ,           "まみむめも" ,           "やゆよ" ,           "らりるれろ" ,           "わをん" ,           "がぎぐげご" ,           "ざじずぜぞ" ,           "だぢづでど" ,           "ばびぶべぼ" ,           "ぱぴぷぺぽ" ,           "っゃゅょ" ] でこれを回して、dictionaryに必要な要素を詰めて、配列にして返すファンクションを用意する def getList ():     btn_list = []     for row in aiueo :         for character in row :             data = { "cap" : character , "class" : "aiubtn" }             btn_list . append ( data )         return btn_list htmlで使うから表示用の文字とクラスくらいしか思いつかなかった app.py import aiueobutton @ app . route ( '/' ) def home ():     return r

WEBアプリの設計

 細かい設計をしてから作る気はない。 試行錯誤しながらやっていく。 【したいこと】 「Wordleみたいな感じで市区町村を当てるゲームにしたい」なので ・毎日1問出題される ・五十音を入力してもらって文字ごとの使用有無判定、位置判定をする ・回答履歴を残す ・回答履歴はコピーできる こんなもんか プロジェクトフォルダに static  ├images  ├scripts.js  └style.css templates  ├base.html  └index.html app.py を用意 base.html  HTMLのベース   <head>部、<body>部の共通部分を書いておく <! doctype html > < html lang = "ja" >     < head >     </ head >     < body >         {% block main %}         {% endblock %}     </ body > </ html > index.html  本体(という言い方であってるのか?) {% extends "base.html" %} {% block main %} ここに本体を書いていく {% endblock %} という理解でやっていく

Python+Flaskのお試し

 市区町村のデータの目途は立った。 次はWEBアプリの作成だ。 Pythonは触ったことないけどどうにかなるだろうと考えて いろいろググってみる 稼働環境に金を掛ける余裕は無い! PythonのFlaskアプリをGoogle App Engineで動かすのが 一番お金が掛からんっぽい気がするのでこれで進める。 Visual Codeインストールして Python3.10インストールして なるほど、いろいろなPythonのバージョンを管理するのに仮想環境ってのがあるのね。 py -m venv venv ほうほう。venvフォルダができた。ここが仮想環境ということね。 仮想環境を有効化する .\venv\Scripts\activate できたようだ 仮想環境を無効化する場合は deactivate いつ使うんだ? で、この仮想環境にFlaskをインストールするということね pip install flask pip freeze > requirements.txt Pythonのお作法はよくわからんのでサンプルをコピペして flask run http://127.0.0.1:5000 にアクセスすると「Hello World!」 OK!OK! ここまで出来たら言語差なんてたいしたこと無い!と思う。。。

市区町村データってどうやって用意する

イメージ
 思い立ったらすぐ動き出すのがモットーです。 まずは市区町村のデータが欲しいな。と Chat GPTくんに聞いてみます。 「日本の市区町村の一覧を作成して  都道府県名,市区町村名,ヨミガナ」 “お答えします 北海道 札幌市,さっぽろし 函館市,はこだてし 小樽市,おたるし 旭川市,あさひかわし 室蘭市,むろらんし 釧路市,くしろし 帯広市,おびひろし 北見市,きたみし  ・  ・  ・     ” あかん。終わらん。 無難にググってみると 総務省のHPに全国地方公共団体コードというページがあり  ここ 「都道府県コード及び市区町村コード」というExcelファイルが公開されていました。 内容は  団体コード|"都道府県名(漢字)|市区町村名(漢字)|都道府県名(カナ)|市区町村名(カナ) という感じで欲しいものがとりあえず入っていましたのでこれを利用してみることにします。 一覧が手に入ったので必要なデータはマクロで調整すればいいので WEBアプリ側の開発に進みます。 市区町村って1,741団体もあるんですね!

開発経緯

以前より、なんかWEBアプリ作れないかなぁと考えてました。 Wordle とかシンプルで奥深くていいよね! Chat GPTくんに  「提案してください   ・WEBアプリに移植できる   ・個人でできるゲーム   ・ゲームのルールは単純   ・長年存在している」 などを尋ねる日々・・・ 提案してくれたものは  "Picture Puzzle Panic"(絵パズルパニック)  "Word Link Quest"(ワードリンククエスト)  "Color Spectrum Challenge"(カラースペクトラムチャレンジ)  "Mystery Code Breaker"(謎のコードブレイカー)  "マスターマインド・チャレンジ"(論理パズルゲーム) 説明を読んでもピンとこない。 ある日、娘の夏休みの宿題を見ていると 「えっ?この県の県庁所在地知らんの?」 ということが。 ん? 日本の市区町村って結構な数があるはず。Wordleっぽくできるんじゃ。しかも勉強になるんじゃ! ということでチャレンジスタート!