私はチャットボットに取り組んでいます。イメージボード上のギャラリーへのリンクが投稿されたときにいつでもAPIから一致するデータを投稿したいと思う。ギャラリーリンク1234は正の数(ID)であり、a6fb1049固定長10(トークン)の16進文字列であり、このURLのリストを抽出して有効性を確認するための速やかな方法
https://example.com/a/1234/a6fb1049/
ように見えます。 今はギャラリーリンクから始まるメッセージしか処理できません。
if message_object.content.startswith("https://example.com/a/"):
私は、メッセージが送信されるたびにメッセージ文字列を処理するための迅速な方法を探しています。
if message_object.content.startswith("https://example.org/a/"):
temp = message_object.content.split("/")
# Check if link is actually a valid link
if temp[2] == "example.org" and temp[3] == "a" and 0 < int(temp[4]) and len(temp[5]) == 10:
gallery_id = temp[4]
gallery_token = temp[5]
response = requests.post(url, payload, json_request_headers)
私は、文字列を分割するurllib.parse.urlparseとposixpath.splitを使用して、別の部分文字列をチェックする考えたが、これは非効率的であるような気がします。
私は本当に正規表現では良くないので、これは私が思いついたすべてです。
searchObj = re.search(r'https://example.org/a/(.*)/(.*)/', message)
とすぐに、これはすでに失敗している2つのリンクがあるとして一つだけのマッチングパターンが存在する場合には罰金だし、それは正しいですが、。
リスト内のリンクに一致するすべてのメッセージを取得し、リストを繰り返して、リンクが有効であればページのヘッダーを確認します。次に、データを取得するためのAPIリクエストを作成します。
StackoverflowのURLにマッチする正規表現では、そのような特定のケースのみの一致が示されていないので、これがnewbの質問であると申し訳ありません。あなたが書いた理由を私は理解していない
"リストの中でリンクに一致するすべてのメッセージを取得し、リストを反復処理したい" - 必要に応じて[re.findall'](https://docs.python.org/2/library/)のように聞こえます。 re.html#re.findall) – asongtoruin