flaretool
はじめに
このライブラリはPython3.9以降のバージョンを前提に作成していて、監修はChatGPTにやってもらっています笑
日本の祝日を簡単に取得したり、ネットワーク関連の便利な機能を作っていて、これからさらにいろんな機能を開発していく予定です!(少しずつ記事にします!)
なんとなくで作ったものなので、不具合があったらごめんなさい・・・
気になるところがあれば Github Issue か 問い合わせ から連絡くださいませ!
使い方
インストール方法
pip install flaretool
ネットワーク関連のツール
# インポート
from flaretool import nettool
# 指定されたドメインの情報を取得(IPアドレスからでもOK)
ip_info = nettool.get_global_ipaddr_info("google.co.jp")
print("ip:", ip_info.ipaddr) # ip: 203.0.113.1
print("hostname:", ip_info.hostname) # hostname: google.co.jp
print("country:", ip_info.country) # country: United States
# ドメイン名からIPアドレスを取得
ip_address = nettool.lookup_ip("google.co.jp")
print(ip_address) # 203.0.113.1
# IPアドレスからドメイン名を取得
domain_name = nettool.lookup_domain("203.0.113.1")
print(domain_name) # google.co.jp
# 指定されたIPアドレスが特定のネットワークに属しているかどうかを判定
allowed_networks = ["192.168.0.0/24", "10.0.0.0/16"]
is_allowed = nettool.is_ip_in_allowed_networks(
"192.168.0.100", allowed_networks)
print(is_allowed) # True
# 指定されたドメイン名が存在するかどうかを判定
domain_exists = nettool.domain_exists("example.com")
print(domain_exists) # True
# 日本のIPアドレスのリストを取得
japan_ips = nettool.get_japanip_list()
print(japan_ips)
# 指定されたアドレスが日本のIPアドレスか確認
is_japan = nettool.is_japan_ip("203.0.113.1")
print(is_japan) # False
# 日本語を含むドメインをpunycodeに変換
puny_info = nettool.get_puny_code("日本語ドメイン.jp")
print("originalvalue:", puny_info.originalvalue) # originalvalue: 日本語ドメイン.jp
print("encodevalue:", puny_info.encodevalue) # encodevalue: xn--eckwd4c7c5976acvb2w6i.jp
print("decodevalue:", puny_info.decodevalue) # decodevalue: 日本語ドメイン.jp
# 特定のユーザーエージェントでスクレイピング可否を確認
url = "http://example.com/page.html"
user_agent = "MyScraperBot"
allowed = nettool.is_scraping_allowed(url, user_agent) # user_agentはオプション引数
if allowed:
print(f"{url} はユーザーエージェント '{user_agent}' でのスクレイピングが許可されています。")
else:
print(f"{url} はユーザーエージェント '{user_agent}' でのスクレイピングが禁止されています。")
NetToolはコマンドでも実行できるようにしているので、シェルに組み込むこともできます!
$ flaretool nettool get_global_ipaddr_info google.co.jp
ipaddr='203.0.113.1'
hostname='google.co.jp'
country='United States'
$ flaretool nettool lookup_ip google.co.jp
203.0.113.1
文字列の変換
from flaretool import utills
from flaretool.utills import ConversionMode
# 文字列変換
## 半角に変換
value = "1234567896789"
result = utills.convert_value(value)
print(result) # "1234567896789"
## 全角に変換
value = "Hello"
result = utills.convert_value(value, ConversionMode.FULL_WIDTH)
print(result) # "Hello"
## 英文字のみ半角に変換
value = "ABCabc123"
result = utills.convert_value(
value, ascii=True, digit=False, kana=False)
print(result) # "ABCabc123"
## 小文字に変換
value = "ABCabc"
result = utills.convert_value(
value, ConversionMode.LOWER)
print(result) # "abcabc"
## 大文字に変換
value = "ABCabc"
result = utills.convert_value(
value, ConversionMode.UPPER)
print(result) # "ABCABC"
日本の祝日を取得
便利なデコレーター
ネットワークに接続されていないと実行ができないデコレーター
ネットワークへ接続されていない場合は実行ができないメソッドを作ることができます。
from flaretool.errors import FlareToolNetworkError
from flaretool.decorators import network_required
# ネットワーク接続を必須とするデコレーター
@network_required
def network_access(url):
# ネットワークに接続されている場合に実行する処理
response = requests.get(url)
return response.json()
def main():
try:
network_access()
except FlareToolNetworkError:
# ネットワークに接続されていない場合の処理
pass
メソッド内で例外が発生したときにリトライしてくれるデコレーター
メソッド内でエラーが発生した場合に自動でリトライしてくれるようになります。
from flaretool.decorators import retry
# 例外が発生した場合にリトライを行うデコレーター
@retry(tries=3, delay=2) # 2秒毎に3回までリトライ
# @retry(3) # ←この場合は1秒毎に3回までリトライ
def retry_function():
pass
指定回数リピート実行してくれるデコレーター
メソッドを指定の回数(指定の秒数毎に)リピート実行してくれるようになります。
from flaretool.decorators import repeat
# 複数回実行を行うデコレーター
@repeat(tries=3, interval=2) # 2秒毎に3回メソッドを実行
# @repeat(2) # ←この場合は連続で2回実行
def repeat_function():
# 強制的に実行を止めたい場合はStopIterationをraiseさせる
if 複数回の実行をとめたい条件:
raise StopIteration("Stop the loop!")
pass
制限時間をつけるデコレーター
メソッドの実行に制限時間をつけることができます。
from flaretool.decorators import timeout
@timeout(5)
def my_function():
# Some time-consuming operation
time.sleep(10)
return "Operation completed"
try:
result = my_function()
print(result)
except TimeoutError:
print("Operation timed out")
## 出力例
# Operation timed out
メソッドの実行時間を計測するデコレーター
メソッドの実行時間をロガーに出力できます。
from flaretool.decorators import timer
## Logger Setup
from flaretool.logger import setup_logger
logger = setup_logger(logging.DEBUG, console=True)
@timer
def example_function(x):
time.sleep(x)
return x
example_function(2)
## 出力例
# [2024-08-01 00:00:00,000] DEBUG : example_function took 2.0000 seconds to execute.