4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【flaretool】いろんな機能をPythonで作って公開してみた

Last updated at Posted at 2023-06-23

flaretool

LicensepythonversionReleaseDatebuildCoverageDownloads

はじめに

このライブラリは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.
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?