【ChatGPT】対話しながら郵便番号APIで住所を取得

以前、サンプルコードを作っていますが、GPT4を使って作成するようにしました

GPT4で作成したコード

作成したC#プログラムは、ZipCloud APIを利用して日本の郵便番号に基づく住所情報を取得するためのものです。ZipCloudApiClient クラスでは、HTTPクライアントを使用してAPIにリクエストを送り、郵便番号に対応する住所情報をJSON形式で取得します。このクラスは郵便番号のフォーマットが正しいかどうかを検証する機能も備えており、7桁の数字でなければ例外をスローします。APIからのレスポンスは、定義されたデータモデル(ZipCloudApiResponseAddressResult)を使用してデシリアライズされ、結果はコンソールに表示されます。エラーハンドリングにより、APIリクエストの失敗や結果の不在時には適切なエラーメッセージが表示されます。

using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text.Json;
using System.Collections.Generic;
using System.Text.Json.Serialization;
using System.Text.RegularExpressions;

public class ZipCloudApiClient : IDisposable
{
    private static readonly HttpClient HttpClient = new HttpClient();
    private readonly string _baseUrl = "http://zipcloud.ibsnet.co.jp/api/search";

    public async Task<ZipCloudApiResponse> GetAddressByZipCodeAsync(string zipCode)
    {
        if (!IsValidZipCode(zipCode))
        {
            throw new ArgumentException("Invalid zip code format.");
        }

        string requestUrl = $"{_baseUrl}?zipcode={zipCode}";

        HttpResponseMessage response = await HttpClient.GetAsync(requestUrl);
        if (!response.IsSuccessStatusCode)
        {
            throw new Exception($"API request failed: {response.ReasonPhrase}");
        }

        string jsonResponse = await response.Content.ReadAsStringAsync();
        var apiResponse = JsonSerializer.Deserialize<ZipCloudApiResponse>(jsonResponse);

        if (apiResponse?.Results == null || apiResponse.Results.Count == 0)
        {
            throw new Exception("No results found.");
        }

        return apiResponse;
    }

    private bool IsValidZipCode(string zipCode)
    {
        // 日本の郵便番号は7桁の数字
        return Regex.IsMatch(zipCode, @"^\d{7}$");
    }

    public void Dispose()
    {
        HttpClient.Dispose();
    }
}

public class ZipCloudApiResponse
{
    [JsonPropertyName("message")]
    public string Message { get; set; } = "";

    [JsonPropertyName("results")]
    public List<AddressResult> Results { get; set; } = new List<AddressResult>();

    [JsonPropertyName("status")]
    public int Status { get; set; }
}

public class AddressResult
{
    [JsonPropertyName("address1")]
    public string Address1 { get; set; } = "";

    [JsonPropertyName("address2")]
    public string Address2 { get; set; } = "";

    [JsonPropertyName("address3")]
    public string Address3 { get; set; } = "";

    [JsonPropertyName("kana1")]
    public string Kana1 { get; set; } = "";

    [JsonPropertyName("kana2")]
    public string Kana2 { get; set; } = "";

    [JsonPropertyName("kana3")]
    public string Kana3 { get; set; } = "";

    [JsonPropertyName("prefcode")]
    public string Prefcode { get; set; } = "";

    [JsonPropertyName("zipcode")]
    public string Zipcode { get; set; } = "";
}

public class Program
{
    public static async Task Main(string[] args)
    {
        using (var client = new ZipCloudApiClient())
        {
            try
            {
                var result = await client.GetAddressByZipCodeAsync("7830060"); // 郵便番号を適宜変更してください
                foreach (var address in result.Results)
                {
                    Console.WriteLine($"住所(カナ): {address.Kana1} {address.Kana2} {address.Kana3}");
                    Console.WriteLine($"住所(漢字): {address.Address1} {address.Address2} {address.Address3}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

ChatGPTレスポンス

前回制作サンプル

参考

AI,C#,ChatGPT

Posted by hidepon