カテゴリ: python

TiwtterやMastodonと違い、BlueSkyのOGPカードに表示するタイトルや説明、画像はクライアントが準備してPOSTする時に沿えてやらねばならない。
その場合の画像のフォーマットはJPEGは駄目、PNGは大丈夫だった。JPEGデータだと以下のようなエラーが返ってくる。
BadRequestError: Response(success=False, status_code=400, content=XrpcError(error='InvalidMimeType', message='Wrong type of file. It is */* but it must match image/*.'), headers={'Date': 'Sat, 23 Mar 2024 14:55:59 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': '96', 'Connection': 'keep-alive', 'X-Powered-By': 'Express', 'Access-Control-Allow-Origin': '*', 'RateLimit-Limit': '5000', 'RateLimit-Remaining': '4997', 'RateLimit-Reset': '1711209359', 'RateLimit-Policy': '5000;w=3600', 'ETag': 'W/"60-naTgCWHhjZ5FGkdXs552SxW2Nug"', 'Vary': 'Accept-Encoding'})

メモ:Pythonで画像フォーマットを変換するにはPillowを使う模様
https://note.nkmk.me/python-pillow-basic/


このエントリーをはてなブックマークに追加 mixiチェック

クローリングする先のサイトのHTML変更に合わせて解析箇所も随時追従しないといけないんだけどサボってた。
HTMLは直接解析は中々厳しいので、HTMLCleanerで一旦XMLにして、それを解析するのが楽。
Pythonは数人以上でとりくむような代物だとやってられないけれど、この程度の処理だとJavaよりも楽ですな。全部設定ファイルなので引数を受け取る処理が先ず不要になるし。

このエントリーをはてなブックマークに追加 mixiチェック

「標準ライブラリ内でよく落ちる」「原因は離れた箇所のショボいTypo」
今までJavaが多かったんだけど最近諸事情によりPythonを見ないといけなくなったので適当に調べつつやっている。まぁ何か見た感じ文法が似ているし別にMCなシステムでもないショボいツールなので何とかなるだろうと。
使っているうちに感じるこの、Javaプログラミングと違いPythonプログラミングがC言語プログラミングに似ている冒頭のこの感じ…。
Javaだとさ、例えばぬるぽで落ちると実際にその行のコードで使ってるオブジェクトがnullである事が殆ど。他のExceptionが起きた時も大体、何というか、処理が停止した個所と実際に問題のあるコードは近い訳ですよ。
ところがC言語だと必ずしもそうではなくmemcpyやstrcpyでcore吐いて落ちたからといってmemcpyやstrcpyに問題がある事は滅多になく、それら標準ライブラリに渡す変数が悪い訳でもなく、実は原因は一見全然関係ない別の処理が変数領域を壊していたりすることがしばしばありデバッグは結構難しい。
Pythonはスクリプト言語なのでcoreを吐くと言う事は無いのだけれど、使ってみると意外にもJavaよりもC言語に近い感触がある。落ちる個所と、問題のある記述が遠い…というかさっぱり分からないのでコードを削りつつ実行して怪しい箇所を絞り込んでいく作業をしていると「お、これは昔、Cで散々やったアレだ…」と思い出した。
見つけた原因も「えー、これコンパイルで検出してよ…いや間違えたのはこっちだけど…」というようなショボいTypoばかりで、よくこれで標準ライブラリを落とせたな…。
やっぱ冗長とは言われつつもJavaの方がデバッグは楽ですよ。コーディングが楽な方が良いかデバッグが楽な方が良いか、切羽詰まる感じはどちらかは、明らか。
ちなみにC++だとショボいTypoで全然関係無さげなSTLやヘッダが山ほどコンパイルエラーを起こすのでアレも嫌いだが。

Pythonライブラリの教科書
立山 秀利
日経BP
2023-03-17

このエントリーをはてなブックマークに追加 mixiチェック

dataclassのメンバーに自前の構造体を使ってそれを初期化したい時。

@dataclass
class Item:
    value: str=''
    pos: int=0

@dataclass
class MyInfo:
    name: Item =Item('',0,'')) 
    parent: Item =Item('',0,'')) 
....

と言った書き方をすると、3.11からはMyInfoのコンストラクタが実行時エラーになる。
こう書かないといけない。
@dataclass
class MyInfo:
    name: Item = field(default_factory=Item('',0,'')) 
    parent: Item = field(default_factory=Item('',0,'')) 

fieldやdefault_factoryが何なのかは…知らん。
ちなみにこれ、その後、MyInfoのオブジェクトに対して.name=0 とかは平気で代入できる…ダメじゃん。
静的型システムも未導入の癖に、場当たり的(?)にチェックを強化するのは如何なものか。

入門 Python 3 第2版
Bill Lubanovic
オライリージャパン
2021-03-22

このエントリーをはてなブックマークに追加 mixiチェック

Twitterも先行き不透明ともっぱら評判なのでBotを増やす先を検討。
Threadsは公開APIもないしブラウザからアクセスも出来ないしInstagramアカウント必須で無理だから、後は色物でWeibo(https://m.weibo.cn/)か、TruthSocial(https://truthsocial.com/)か。ちなみにPawooとMisskeyはもうある。
Weiboはアカウント作成に携帯電話番号の登録が必要ということなので、今回はTruthSocialで行く( https://truthsocial.com/@nekora2199 )。
TruthSocialはMastodonの派生らしいので、何となく同じくアクセストークンを取得すれば全く同じAPIで使えるような気がするけれど、まぁまずは既存ので試そうと思ったらJavaライブラリが見当たらぬ…。
とりあえずPythonのを動かしてみるか… https://github.com/mcurranseijo/TruthWrapper そういえばAPI登録もシークレットキーの取得も無いんだけどどうなっておるのかな?サンプルだとユーザ名とパスワードでポスト出来るっぽいが…。
Splyderから起動すると
RuntimeError: asyncio.run() cannot be called from a running event loop
と言ってダメなのでコマンドラインから実行すべし。
  File "TruthWrapper-main\main.py", line 9, in main
    post = await user.post("Hello World!, This is a test post from TruthPy")
  File "TruthWrapper-main\TruthPy\user.py", line 29, in post
    response = await request_json(
  File "TruthWrapper-main\TruthPy\utils.py", line 11, in request_json
    data['next'] = response.headers['Link'].split(',')[1].split(';')[0].replace('<', '').replace('>', '')[1:]
KeyError: 'Link'
…駄目やんけ。何かの戻り値の文字列処理で失敗しているだけっぽいから見れば直せるような気もするが今日はこれまで。
→ちょっと調査したら403が返ってきているのに200で何かデータが返ってきている前提でパースしてるから失敗している。
つかそもそもクライアントIDとシークレット、このソースに直書きされているものをそのまま使って良いものだろうか…。TwitterやMastodonやMisskeyの時はクライアントIDとシークレットは各自のを使っていたけど。
ちなみにAPIのURLはhttps://truthsocial.com/api/v1/のようだ。んむ、MastodonっぽいURL。

https://www.reddit.com/r/TRUTHsocialWatch/comments/v29065/has_anyone_had_luck_accessing_the_truth_social_api/
「The endpoints seem to be geo-restriced. If you're outside the US/Canada/UK/Portugal you'll need a VPN.」というのも気になるな…北米リージョンにVM立てて試すか。


それにしてもやはり外聞が悪いのかTruth Social関連の技術ブログは余り見かけないな。



このエントリーをはてなブックマークに追加 mixiチェック

Anacondaに添付のIDE、Spyder。
5.4.3にアップデートしてちょダイアログの手順に従うと、次回からのSpyder起動時に毎回こんなダイアログが出るようになる。
nwJbb

これに陥ると、conda install pylsp=1.7.2とかやっても駄目。
結局正しい手順は
conda remove spyder
このエントリーをはてなブックマークに追加 mixiチェック

何か@dataclass_jsonなデータクラスを作ってJSONで出力すると、boolの筈のメンバーが0とか1になる事が。
Pythonの型は動的とかいう不完全不徹底な型システムであり、代入時にヘマをすると何事も無かったかのような顔をしてエラーも出さずにしれっと変数の型は変わる。今回は代入時にヘマをしているに違いない…。
この文字列'True'をstrtobool()で変換しているだけなのにしかしJSONでは1になる、その怪しい変数の型を変換直後のタイミングでprintしてみると「int」…マジか?!マジで?!マジだ!!
まぁ結局更にそれをbool()で囲む、bool(strtobool(文字列))で上手く行ったが…。
strtoboolと言う名前の関数の戻り値の型がintとは、Pythonの標準ライブラリを作った奴はどうかしているね。因みにこの標準ライブラリは3.12では無くなるという…。こんないかにも彼方此方で使っている関数をバッサリとは、Pythonの標準ライブラリをメンテしている奴もどうかしている。
やっぱ信用できてかつ程よく簡単なのはJavaかC#だけや…C#は殆ど知らぬからつまりJavaだけ。
Pythonライブラリの教科書
立山 秀利
日経BP
2023-03-17


このエントリーをはてなブックマークに追加 mixiチェック

本屋でPython本をちょっと立ち読みしたら、あれは人間に対する注釈で実行時には何の影響もないと書いてあって、確かに
flg :bool = 'False' if flg: print("True") else: print("False")
これを実行すると
True
と何事もなかったかのように堂々と表示される。とんでもないな。動的型付け言語恐るべし。

ロバストPython ―クリーンで保守しやすいコードを書く
Patrick Viafore
オライリー・ジャパン
2023-03-25

 
このエントリーをはてなブックマークに追加 mixiチェック

実行→ファイルごとの設定でダイアログが開く。
一般設定の下のコマンドラインオプションにチェックして、引数を入力。
複数ある場合はスペースで区切る。
0419
そして「実行」ボタンで実行。
Eclipseと違い、毎回、このダイアログから実行する必要がある。


このエントリーをはてなブックマークに追加 mixiチェック

Tools→Preferenceで開いたダイアログで、Application→Advancedタブを選択、Languageで「日本語」を選択。OKで閉じてから再起動
0419
スパイダーマン 東映TVシリーズ DVD-BOX
大山いずみ
東映ビデオ
2005-12-09


このエントリーをはてなブックマークに追加 mixiチェック

↑このページのトップヘ