LoginSignup
3
3
新規開発や新技術の検証、導入にまつわる記事を投稿しよう!

【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(max_attempts=3, delay=2) # 2秒毎に3回までリトライ
# @retry(3) # ←この場合は1秒毎に3回までリトライ
def retry_function():
    pass

指定回数リピート実行してくれるデコレーター

メソッドを指定の回数(指定の秒数毎に)リピート実行してくれるようになります。

from flaretool.decorators import repeat

# 例外が発生した場合にリトライを行うデコレーター
@repeat(repeat_count=3, interval=2) # 2秒毎に3回メソッドを実行
# @repeat(2) # ←この場合は連続で2回実行
def repeat_function():
    # 強制的に実行を止めたい場合はStopIterationをraiseさせる
    if 複数回の実行をとめたい条件:
        raise StopIteration("Stop the loop!")
    pass
3
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
3
3