💡

一行に複数記録されたURLを一つ一つ分けてURLチェック

2023/08/27に公開

今回は、Shopifyの商品登録をCSVファイルを使って行いたいが、エラーになり困っているお角様対応の中で、必要なプログラムをChatGPT無料版を活用して作り対応した内容を記録します。

まずShopifyでCSVファイルを使って一括して商品を登録する中で、一つの商品に複数の画像を登録したい場合の解説からです。

先に答えを書くと、Shopifyは、一行に一つに画像のURLの形で記録してください。
一行にカンマで区切って複数のURLを記録しても、エラーになります。

サイズ違いではなく商品に撮影角度が違うなどで複数の画像をとうろくしたい場合は、ハンドル名をコピーして、一つずつURLを設定してください。

また、サイズ違いなどバリエーション違いで画像を登録したいときは、ハンドル名をコピーして、サイズなど必要な項目と画像を登録してください。

この辺りのことは、ネット検索すると見つかると思います。
Shopifyのアプリを使うことで、画像を一括登録する方法も、あります。

複数記録されたURLを分割するプログラム

今回は、Pythonで書きました。
Excelを使っていたので、VBAで出来たらよかったのですが、ChatGPTでVBAのコードを思うように生成できなかったので、Pythonに変えて作りました。

私は、Windows11の環境で、Pythonを使える環境を作っています。
Stable Diffusion web UI(AUTOMATIC1111版)を使いたいので、Pythonを使えるようにしました。

import csv
import codecs

def extract_urls_and_save():
    input_file_path = 'input.csv'
    output_file_path = 'output.txt'

    urls = []

    with codecs.open(input_file_path, 'r', encoding='utf-8-sig') as input_file:
        reader = csv.reader(input_file)
        for row in reader:
            if row:
                urls.extend(row[0].split(','))

    with open(output_file_path, 'w', encoding='utf-8') as output_file:
        for url in urls:
            output_file.write(url.strip() + '\n')

if __name__ == '__main__':
    extract_urls_and_save()

UTF-8 BOMの文字コードで、 ” ” とダブルクォーテーションで一行が囲まれたCSVファイルで記録されているURLを、一つずつ分けることがでっきるプログラムです。

input.csvというファイルにURLを分けたい内容を記録してから実行してください。

このプログラムを実行すると、output.txtというファイルが作られます。
ここに、一行ずつURLが記録されます。
しかも元ファイルで一行で記録されていたURLが分かりやすいように、複数行改行されて次のURLが記録されます。

URLチェックプログラム

URLを分割できたので、output.txtを読み込みURLを順番にチェックするプログラムです。

画面にURLをチャックした結果を表示するとともに、ファイルにもチェック結果を記録できます。

こちらのファイル名でチェック結果が、保存されます。
test_results.txt
ファイル名は、プログラムの冒頭で自由に設定できます。

ただ短時間に大量にURLのチェックを行うと、サーバーから接続を切断されることがあるかもしれないです。
そのため本当は、ある程度テストしたら少し待機時間を作るプログラムの方が、良かったかもしれないです。

実際に、サーバーから切断されたエラーが表示されたことが、ありました。

def test_urls_and_save_results():
    input_file_path = 'output.txt'
    output_file_path = 'test_results.txt'

    with open(input_file_path, 'r', encoding='utf-8') as input_file:
        lines = input_file.readlines()

    results = []

    for line in lines:
        url = line.strip()
        if url:
            result = test_url(url)
            results.append(result)
            print(result)  # 結果を画面に表示

    with open(output_file_path, 'w', encoding='utf-8') as output_file:
        for result in results:
            output_file.write(result + '\n')

def test_url(url):
    import requests

    try:
        response = requests.get(url)
        if response.status_code == 200:
            return f"URL: {url} - OK"
        else:
            return f"URL: {url} - Status Code: {response.status_code}"
    except Exception as e:
        return f"URL: {url} - Error: {e}"

if __name__ == '__main__':
    test_urls_and_save_results()

チェックOKの場合

URL: https://●●● - OK

チェックNGの場合

URL: https://●●● - Status Code: 403
このような形で、表示されます。

サーバーの都合で切断された場合

URL: https://●●● - Error: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

このような形で、記録されます。

ChatGPT無料版でもプログラミングできる

ChatGPT無料版でも、数回のやり取りをすることで使えるプログラムを作ることができます。
今回は、とりあえずURLのチェックをしたかったので、とてもシンプルなプログラムですが、先に書いたように、サーバーに負担を掛けないように配慮したプログラムを書くことは、必要だっと思います。

色々改善できる点があるプログラムなので、何かの参考にして頂けましたら幸いです。

Discussion