Pythonを使った非同期処理について
非同期処理 (Asynchronous Processing) とは、あるタスクを実行している最中に、そのタスクの完了を待たずに別のタスクを開始できる処理方式のことです。
例えば、今回はスーパーマーケットでのレジで考えてみましょう。
同期的なレジ(一般的なレジ)
普通のレジは同期的に動いています。
-
あなた(お客さん1)がレジに商品を置きます。
-
店員さんが商品のスキャンを始め、終わらせます。
-
店員さんが合計金額を伝え、あなたがお財布から現金を探したり、クレジットカードを用意したりします。この間、店員さんとレジはあなたを待っています。後ろのお客さんもただ待っています。
-
あなたが支払いを済ませます。
-
あなたが商品を袋に詰めます。(お店によっては店員さんが手伝いますが、それでも時間がかかります)
-
すべての工程が完全に終わってから、ようやく次のお客さん2の対応が始まります。
このように、一つのタスク(あなた一人の会計)が完了するまで、次のタスクに進めないのが同期処理です。お客さんが財布を探す「待ち時間」に、レジ全体が停止してしまいます。
非同期的なレジ(最新のセルフスキャン&セルフレジシステム)
もし、スーパーが最新の非同期的なシステムを導入したらどうなるでしょう。
-
スキャンエリアで、あなた(お客さん1)が商品のスキャンを始めます。
-
スキャンが終わると、あなたは会計エリアの空いている会計機に進みます。
-
あなたが会計機でお金の支払いをしている間に、スキャンエリアが空くので、すぐにお客さん2がスキャンを開始できます。
-
さらに、あなたの支払いが終わると、あなたは袋詰めエリアに移動します。
-
あなたが袋詰めをしている間に、お客さん2は支払いを済ませ、お客さん3がスキャンを開始できます。
これが非同期処理です。非同期処理は待機時間を有効活用することで効率的にタスク処理を行っていきます。
具体的なコードを見てみましょう。
Pythonの非同期処理(asyncio)を使って、複数のタスクを同時に実行するサンプルコードです。
import asyncio
import time
# 非同期で実行するタスクを定義
async def task(name, delay):
print(f"タスク {name}: 開始")
# ここで待機している間に、他のタスクが実行されます。
await asyncio.sleep(delay)
print(f"タスク {name}: 完了 ({delay}秒後)")
# すべてのタスクを実行するメインの関数
async def main():
print("すべてのタスクを同時に開始します")
start_time = time.time()
# asyncio.gather()は、複数のタスクを並行して実行します
await asyncio.gather(
task("A", 3), # タスクAは3秒かかります
task("B", 1), # タスクBは1秒かかります
task("C", 2) # タスクCは2秒かかります
)
end_time = time.time()
elapsed_time = end_time - start_time
print(f"\nすべてのタスクが完了しました。合計時間: {elapsed_time:.2f}秒")
# プログラムを実行
if __name__ == "__main__":
asyncio.run(main())
DMMでAPIによりクリスマスギフトになりそうな商品情報を取得するpythonコード
DMMが提供している商品情報API version3.0を活用して商品情報を取得するpythonスクリプトです。
import requests
# DMM APIのエンドポイント
API_ENDPOINT = 'https://api.dmm.com/affiliate/v3/ItemList/'
# あなたのAPI IDとアフィリエイトID
API_ID = ''
AFFILIATE_ID = ''
keywords = ['ギフト'] #検索したいキーワード
# APIリクエストのパラメータを設定
params = {
'api_id': API_ID,
'affiliate_id': AFFILIATE_ID,
'site': 'DMM.com',
'service': 'digital', # フロアAPIから取得
'sort': 'match', # ソート順(rank,match or date)
'hits': 15, # 取得する商品数
'offset': 1, # 取得する商品の開始位置
'keyword': keywords, # キーワードをカンマ区切りに変換
'output': 'json' # レスポンスのフォーマットを指定
}
try:
response = requests.get(API_ENDPOINT, params=params)
response.raise_for_status() # HTTPエラーの検出
data = response.json() # レスポンスをJSON形式に変換
# API固有のエラーチェック
if 'result' not in data or 'items' not in data['result']:
raise Exception("APIレスポンスにエラーがあります。")
# 取得したデータを表示(商品名と価格など)
for item in data['result']['items']:
title = item.get('title', '不明')
price = item.get('prices', {}).get('price', '不明')
affiliate_url = item.get('affiliateURL', 'URL不明')
print(f"{title}, 価格: {price}, : {affiliate_url}")
except requests.exceptions.RequestException as e:
print(f"リクエストエラー: {e}")
except Exception as e:
print(f"予期しないエラー: {e}")
Pythonanywhereでpythonスクリプトをスケジュール通りに実行する設定方法
1. PythonAnywhereにログイン
PythonAnywhere にログインしてください。
2. スケジュールタスクのページに移動
- ログイン後、画面の右上にあるメニューから「Tasks」を選択します。
- 「Tasks」ページが表示されるので、「Scheduled tasks」タブをクリックします。
3. タスクの追加
- 「Scheduled tasks」ページの下部にある「Add a new scheduled task」ボタンをクリックします。

4. タスクの設定
以下の項目を入力してタスクを設定します:
-
Command:
python3 /home/your_username/main.pyyour_usernameの部分をPythonAnywhereのユーザー名に置き換えてください。ファイルの保存場所がデフォルトである場合、/home/your_username/にmain.pyがあるはずです。- Python 3環境で実行するため、
python3と指定します。
-
Time:実行したい時間をUTCで設定します。
- 例えば「09:00」に設定すると、毎日午前9時にタスクが実行されます。
- 時間は24時間形式で指定します。
-
Interval:
Dailyを選択します。- これにより、タスクが1日に1度、指定した時間に自動的に実行されます。
-
Optional Description(オプション):
Python 3.13で「No module named 'imghdr'」エラーをTweepyで解決する方法
python 3.13以降では'imghdr'は非推奨となっています。
しかし、Tweepyを利用する場合は、imghdrをインストールすることが求められます。
エラー内容
ERROR: Could not find a version that satisfies the requirement imghdr (from versions: none)
ERROR: No matching distribution found for imghdr
解決策
オープンソースプラットフォーム「HiveSpaceAI/HiveSpace」を利用したマルウェア感染
ある日、私はオープンソースプラットフォーム「HiveSpaceAI/HiveSpace」をダウンロードしようとしました。しかし、ダウンロード過程でウイルスが検出されました。この経験から学んだことを、皆さんと共有したいと思います。
HIVEとは

オープンソースのプラットフォームで、リアルタイムでのコラボレーションとつながりをサポートすることを目的としています。GitHub上で開発が進められています。
経緯
Xから企業の人事を名乗る人からDMが送られてきたのが始まりです。
相手は有名Web3プロジェクトの人事であり、開発者を募集しているとのことでした。
私は、Xのフォロワーが5000人ほどと多かったことや他のアカウントとも活発にやり取りを行っており、本当のアカウントだと信じてしまいました。
しかし、相手は人事になりすましたハッカーであり、ウェブブラウザのウォレットを狙ったのだと思います。
企業の人事になりしました者は、「私の国ではGoogle meetやZoomが使えないのでHiveSpaceをダウンロードしてください」言われ、招待コードが送られてきました。
指示通りにダウンロードすると、マルウェアが仕込まれていることがわかり、トロイの木馬ウイルスが検出されました。
セキュリティツールであるMicrosoft Defenderによりウイルスは検出および削除され、ログもチェックし流出はなかったと安堵しましたが、信頼できるソースからダウンロードすべきだったと反省しました。Web3やクリプト界隈には電子ウォレットを狙ったハッカーが多く、まだまだ注意が必要です。
ウイルスファイルダウンロード後は、残存ファイルやシステム変更などが残る可能性があり、 マルウェア対策を再定義し 、ハードウェア全体のスキャンを実行するなど対策が必要があり、さらに初期化など対応が必要な場合もあるかと思います。
オープンソースのリスク
オープンソースのプロジェクトは誰でもアクセスでき、コミュニティによって維持管理されています。そのため、悪意のあるコードが混入するリスクも当然存在します。
- 信頼できるソースからダウンロードする: オープンソースプロジェクトは公式リポジトリや信頼できる開発者から入手することが重要です。招待コードなどにも注意しましょう。これにより、リスクを最小限に抑えることができます。
- SIEMやセキュリティツールを使用する: ダウンロードするコードの安全性を確認やログの解析などをおこないましょう。
無料でZohoから独自のカスタムメールアドレスを作成する方法
Zoho Mailは、独自ドメインのメールアドレスを無料で作成できるサービスとして人気があります。5つのメールアドレスまで無料で利用できるため、個人や小規模なビジネスで手軽に始めることができます。まず、独自ドメインを購入する必要があります。
作成手順
1.ドメインの購入
お名前.comなどのドメインホスティングサービスでドメインを購入します。

2.Zoho Mailアカウントの作成:
Zoho Mailの公式サイトにアクセスし、無料でアカウントを作成します。

3.ドメインの追加:
作成したアカウントにログイン後、ドメインを追加します。
既に独自ドメインをお持ちの場合は、そのドメイン名を入力します。
ドメインをまだお持ちでない場合は、Zohoの提携ドメインレジストラから購入することもできます。
Zoho Meetingアカウントの[設定]→[組織管理]→[独自ドメイン]に移動します。管理画面のdashboardからドメインをクリックし、購入したドメインを追加します。

4.DNSレコード設定
Zoho Mailから提供されるDNSレコードを、ドメインレジストラで設定します。

推奨にはTXTの利用と記載されていますが、CNAMEレコードを選択します。
お名前.comにアクセスし、DNSレコード設定を利用するをクリックします。

この設定をお名前.comのDNSレコードに追加します。DNSレコード設定にアクセスし、以下の設定を入力します。この作業によりドメインとZoho Mailのメールサーバーに結び付けられます。
Host: Zohoからコピーしてきたものを
また、ZohoのTXTレコードの認証には時間がかかる場合があります。
5. Zoho MXレコードの設定
Zoho MailのMXレコードを、あなたのドメインレジストラで設定します。
この設定によって、あなたのドメイン宛てのメールがZoho Mailに転送されるようになります。

先ほどと同様にZohoの指定の数値をお名前.comのレコードに追加していきます。
MX, SPF, DKIMの関連付けを行っていきます。完了後にVerify all refordsを押します。認証には時間がかかる場合があります。

お名前.comで指定のレコード全てを追加します。

追加後に手続きを完了させます。

ドメインの所有権の認証が完了すると、Zohoで認証完了画面が表示されます。

6. メールボックスの作成:
DNS設定が完了すると、Zoho Mailの管理画面でメールボックスを作成できます。
作成したメールボックスに、あなたの好きなユーザー名を設定し、カスタムメールアドレスを作成します。
これで無料でカスタムドメインのメールアドレスの作成が可能です。
2024年度版:最新版 お名前.comの「ドメインの自動更新解除方法」
お名前.comの自動更新設定をそのままにして不要なドメインが更新されてしまったので、どのようにして「ドメインの自動更新」を解除するのかブログに書きたいと思います。
ドメイン購入後に、使わないのであれば自動更新をオフにしておくことをお勧めします。でなければ知らず知らずのうちに自動でドメインが更新されており、口座から引き落とされてしまいます。
※お名前.comで購入したドメインは自動更新になっているので注意が必要です。
目次
1. Topページにアクセス

まず、お名前.comのホームにアクセスします。
2.ホーム上のドメイン機能一覧をクリック

3.カテゴリから探すのドメイン機能一覧から「ドメインの自動更新」をクリック

4.ドメイン自動更新設定

自動更新を止めたいドメインをチェックします。チェック後に確認画面へ進みます。
5.確認画面

確認画面が表示されるので、内容を確認し、申し込みボタンを押します。
これで自動更新の設定が解除できました。お名前.comでドメインを購入後、使わないことが分かっているのであれば自動更新設定を解除しておくことをお勧めします。
私は気が付いたら請求されており、また1年契約する羽目になりました。
お名前.comで購入したドメインをGoogle siteに登録する方法[2023/10/05最新版]
お名前.comで購入したドメインをGoogle siteに登録する方法です。お名前.comで購入したドメインはGoogle siteで利用可能です。
Google siteは無料でWebsiteを作ることが出来るので便利です。
2023年10月05日最新版
注意:ドメインの所有権を証明する前に、Google siteでサイトを作成または準備しておく必要があります。また、ドメインのDNSレコードを変更する前に、ドメインの登録期間が残っていることを確認してください。
目次
- 手順 1: Google siteでサイトを作成または準備する
- 手順 2: お名前.comでドメインのDNSレコードを変更する
- 手順 3: Google Search Consoleにドメインを登録する
- 手順 4: Google siteを公開する
手順 1: Google siteでサイトを作成または準備する
Google siteを開きます。ウェブサイトを構築 をクリックし、新しいサイトを開始 をクリックします。サイトを作成または準備するには、Google サイトの手順に従います。
サイトの準備ができたら、公開 をクリックします。
右上の設定ボタンを押し、カスタムドメイン設定を行います。

設定したいドメイン名を入力します。

「所有権の証明が済んでいない」と表示されるので所有権の証明を行います。
Google Search Consoleにアクセスし、ドメインを入力します。

DNS レコードでのドメイン所有権の確認を行います。DNS設定をコピーします。

手順 2: お名前.comでドメインのDNSレコードを変更する
お名前.comにログインします。
ドメイン管理画面を開きます。
DNSレコード 設定をクリックします。
ネームサーバーの設定からDNS設定画面に移動します。ホームページに設定したいドメインを選択肢し、次へを押します。

DNS設定
DNSレコード設定を利用するを選択します

DNSレコード設定
入力画面に移動したら、下の入力項目に入力を行います。

ホスト名:
TYPE: TXT
TTL: 3600
VALUE: 先ほど、Google Search Consoleで取得したDNS設定を入力します
優先:
状態: 有効
上記の値を入力し、追加ボタンを押し、確認画面へ進み登録します。

Google Search Console画面に戻り、確認ボタンを押します。

所有権を証明しました
確認ボタンを押すと所有権を証明しましたと表示されます。

所有権を証明できませんと表示される場合
認証されるまでに時間がかかります。数時間ほど待ってから再度登録を行いましょう。

手順 3: Google Search Consoleにドメインを登録する
Google サイトを開きます。
ドメインの購入に使用した Google アカウントでログインします。
Google site画面に戻り、カスタムドメインの設定へと移ります。歯車の設定ボタンを押し、カスタムドメインの設定を押します。

Google site
サードパーティのドメイン登録事業者への接続を行います。次へボタンを押すと、下の画面が表示されます。CNAMEの値と宛先をコピーし、次へボタンを押すことでカスタムドメインが設定されます。

お名前.comでCNAME設定を行う
お名前.comへアクセスします。
先ほどと同じようにDNSレコード設定画面から、TYPEをCNAMEに設定し、必要事項を入力していきます。

ホスト名: www
TYPE: CNAME
TTL: 3600
VALUE: ghs.googlehosted.com
優先:
状態: 有効
上の項目を入力して設定を完了させます。
DNSレコード設定が完了しました。
これでGoogle siteにカスタムドメインを設定することが出来ました。
手順 4: Google siteを公開する
ドメインの公開 をクリックします。
ドメインの所有権を証明すると、ドメインが Google siteに登録され、ドメイン名でサイトにアクセスできるようになります。
Rakuten Developers API Test Formから商品情報をjsonで取得する方法
Rakuten Developers API Test Formから商品情報をjsonで取得する方法
Rakuten APIを活用したアプリの開発時などに役に立つAPI。
取得にはRakuten Developersアカウントを作成する必要があり、申請後に利用可能となっています。
1.下記テストフォームにアクセスする。
2. フォームで取得したい商品情報のkeywordを設定
今回はkeyword = 水で設定しました。

3. Send Getを押す
キーワードにマッチする商品情報が取得できました。

簡単にAPI Test Formから商品情報を取得することが出来ました。
楽天APIを利用するにはDevelopersアカウントを作成しアプリIDを取得する必要があります。申請やAPIの取得は審査などはなくすぐに獲得することが出来ます。
Amazon Product Advertising API(PA-API)から商品情報を取得するサンプルコード
Amazon Product Advertising API(商品情報API)の活用方法
アソシエイト・プログラムの参加者が無料で利用可能なAPIサービスからjsonで商品情報を取得したいと思います。

実行環境:
Windows 10
このAPIは実行環境によりエラーの発生頻度が変わってくるそうです。
pip install
sample.py: Sample code- python
認証キー情報はAmazonアフリエイトから取得することが可能です。
Amazonアソシエイトの管理ページのメニューバーから ツール > Product Advertising APIからリクエストが可能です。
ACCESS_KEY = "<YOUR API KEY>":
SECRET_KEY = "<YOUR SECRET KEY>"
ASSOCIATE_ID = "<INPUT YOUR ID>"
COUNTRY = "JP" 取得する国の情報
keyword = "検索したい商品の名前"
取得した情報はjson形式で出力されます。
追記
Error: (ApiException)
Reason: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was denied due to request throttling. Please verify the number of requests made per second to the Amazon Product Advertising API."}]}
上記のエラーが発生するようになってしまいました。
30日間売り上げがないと、APIが利用できなくなるとのことです。