ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

chatGPTにbashスクリプトを書いてもらう

(2023-04-28 初稿)

最近、はやりのchatGPTを使って、bashスクリプトを作ってもらった。

作ってもらったbashスクリプトは、以下のページある株価を取得するもので、簡単にするためにVYMのみの株価を取得するようにした。

なお、chatGPTは以下のリンクのWeb版を利用して、以下はそのやりとりの抜粋。

筆者:「bashgoogleファイナンスのVYMの現在株価を取得するスクリプトを書いてください。」

chatGPT:「以下は、bashスクリプトを使用してGoogle FinanceからVYMの現在の株価を取得する例です。このスクリプトは、curlコマンドを使用してGoogle FinanceのVYMページにアクセスし、HTMLコードから株価情報を抽出します。」

#!/bin/bash

# Google FinanceのVYMページから株価情報を取得する関数
get_vym_price() {
    # curlコマンドを使用してGoogle FinanceのVYMページにアクセスし、HTMLコードを取得
    html=$(curl -s "https://www.google.com/finance/quote/VYM:NYSEARCA")

    # HTMLコードから株価情報を抽出
    price=$(echo "$html" | grep -o '<meta itemprop="price" content="[^"]*' | sed 's/.*content="//')
    
    # 株価情報を出力
    echo "VYMの現在株価は$priceです。"
}

# 関数を実行
get_vym_price

「このスクリプトを実行すると、以下のように出力されます。

VYMの現在株価は111.22です。

ただし、このスクリプトは取得したHTMLコードから株価情報を抽出する方法に依存しており、Google FinanceのWebページが変更されるとスクリプトが機能しなくなる可能性があります。したがって、長期的にはAPIを使用したより安定した方法を探すことをお勧めします。」

筆者:「スクリプトの構成はすばらしい。しかし、現在のgoogleファイナンスのWebページが変更になったのか、株価を取得することはできませんでした。」

chatGPT:「申し訳ありません、Google FinanceのWebページの変更により、スクリプトが正常に機能しなくなった可能性があります。私たちは、情報の更新に追随してスクリプトを維持することが重要であることを理解しています。最新の情報に基づいてスクリプトを更新し、以下に示します。」

(変更箇所のみ)
price=$(echo "$html" | grep -o '<span class="[a-zA-Z0-9_-]*">{[^}]*}</span>' | head -1 | sed 's/<[^>]*>//g')

「このスクリプトでは、Google FinanceのVYMページのURLを変更し、株価情報を抽出する方法を更新しました。新しい方法では、HTMLコードから span タグに囲まれた株価情報を取得し、sed コマンドを使用してタグを除去します。」

「このスクリプトを実行すると、以下のように出力されます。(以下、省略)」

 

筆者:「やはり、株価は取得できませんでした。data-last-price="xxxx" をキーワードにしてはいかがでしょうか?」

cahtGPT:「ありがとうございます。その提案に従って、スクリプトを更新しました。以下に示します。」

(変更箇所のみ)
    # HTMLコードから株価情報を抽出
    price=$(echo "$html" | grep -o 'data-last-price="[0-9\.]*"' | sed 's/data-last-price="//;s/"//')

筆者:「ありがとう。今度は、ちゃんと株価を取得することができました。sedの使い方がとても勉強になりました。複数の置換が一度にできるのですね。」

cahtGPT:「お役に立てて嬉しいです! sed は非常に強力なテキスト処理ツールであり、複数のパターンの置換を一度に行うことができます。この場合、sed の s コマンドを2回使用して、 data-last-price 属性の前後の不要な部分を削除しています。

sed は非常に柔軟なツールであり、テキスト処理に便利です。是非、他の用途でも利用してみてください。」

あとがき

実際に試してみて、自分とは違ったアプローチでスクリプトを作ってもらい、とても良い勉強になった。

特に、「grep -o」の使い方、sedの「;」で複数の置換を実行できるのを知ることができたのは良かった。

皆さんも、良かったら試してね。

関連ページ