Mac OSにてpandocとpbpaste、pbcopyを利用して、ChatGPTの回答をコピペでいい感じに WordPressに貼り付けてみた

最近たまにChatGPTを利用することがあるのですが、そのChatGPTの回答をWordpressに貼り付けたいことってありませんか?

私は最近、それができたらいいなあとおもっていたところ、pandocというアプリケーションと Mac 標準の?pbpaste、pbcopyコマンドを利用して、比較的簡単に実現する方法を見つけたのでここに共有しておきます。

流れとしては、

1.pandocをMacにインストール
2.ChatGPTに質問し、その回答をコピー
3.コンソールで pandoc、pbpaste、pbcopyコマンドを実行
4.WordpressにてカスタムHTMLの部品を作成
5.カスタムHTMLにクリップボードの内容を貼り付け

といった感じです。

1.pandocをMacにインストール

HomebrewでMac OSに pandocをインストールしてもいいらしいのですが、私の環境ではうまくいかなかった(インストールはできたのかもしれませんが、PATHがうまく設定できず断念)したので、パッケージをダウンロードしてインストールしました。

jgm /pandoc 
https://github.com/jgm/pandoc/releases

2.ChatGPTに質問し、その回答をコピー

ChatGPTが回答すると、最後に以下のようなマークが出力されると思います。その中から左から2番目(赤枠部分)をクリックします。

そうすると、ChatGPTの回答がクリップボードに貼り付けられます。

3.コンソールで pandoc、pbpaste、pbcopyコマンドを実行

そしたら、Mac OSのコンソールから以下のコマンドを実行します。

 % pbpaste | pandoc --to=html | pbcopy

すると、自動的に クリップボードのデータがHTMLのタグ付きデータに変換されます。うーん、便利。

4.WordpressにてカスタムHTMLの部品を作成

クリップボードのHTMLのタグ付きデータを貼り付けたいので、WordPress の部品から、以下の通り「カスタムHTML」を選択します。

5.カスタムHTMLにクリップボードの内容を貼り付け

最後に、「カスタムHTML」の中にクリップボードの内容をペーストすれば完了です。

貼り付けた後、プレビュー でみてみれば完成イメージが確認できます。なお、このプレビュー は簡易的なので、実際にどう見えるかは実際に記事をアップロードして確認したほうが良いと思います。

参考サイト:

PandocのインストールとPDF生成(macOS)
https://blog.machine-powers.net/2018/07/02/install-pandoc-and-generate-pdf/#pandocのインストール
ChatGPTの回答をWordPressに整形テキストとして貼り付ける方法
https://flogics.com/wp/2024/09/chatgpt-markdown-to-wordpress/

3種類のCSVを読み込んで1つのJSONデータにするpythonをChatGPTに作成してもらった

以下の3つのファイルを1つのJSONデータにするPythonプログラムをChatGPTに作成してもらいました。

mail-src,mail-subject
aaa@yyy.com,"test ay1"
aaa@yyy.com,"test ay2"
aaa@zzz.com,"test az1"
bbb@yyy.com,"test by1"
bbb@zzz.com,"test bz1"
ccc@yyy.com,"test cy1"
ccc@zzz.com,"test cz1"

uid,mail-src
user-a,"aaa@yyy.com,aaa@zzz.com"
user-b,"bbb@yyy.com,bbb@zzz.com"
user-c,"ccc@yyy.com,ccc@zzz.com"

dest,state,category,black,pc,uid,mail
https://aaa.com:9001/aaa,pass,phishing,no,pc-a,user-a,aaa@xxx.com
https://bbb.com:9001/bbb,block,c2,yes,pc-b,user-b,bbb@xxx.com
https://ccc.com:9001/ccc,pass,c2,yes,pc-c,user-c,ccc@xxx.com

出来上がりのJSONイメージは以下の通りです。

[
  {
    "dest": "https://aaa.com:9001/aaa",
    "state": "pass",
    "category": "phishing",
    "black": "no",
    "pc": "pc-a",
    "uid": "user-a",
    "mail": "aaa@xxx.com",
    "mail-src": {
      "aaa@yyy.com": [
        "test ay1",
        "test ay2"
      ],
      "aaa@zzz.com": [
        "test az1"
      ]
    }
  },
  {
    "dest": "https://bbb.com:9001/bbb",
    "state": "block",
    "category": "c2",
    "black": "yes",
    "pc": "pc-b",
    "uid": "user-b",
    "mail": "bbb@xxx.com",
    "mail-src": {
      "bbb@yyy.com": [
        "test by1"
      ],
      "bbb@zzz.com": [
        "test bz1"
      ]
    }
  },
  {
    "dest": "https://ccc.com:9001/ccc",
    "state": "pass",
    "category": "c2",
    "black": "yes",
    "pc": "pc-c",
    "uid": "user-c",
    "mail": "ccc@xxx.com",
    "mail-src": {
      "ccc@yyy.com": [
        "test cy1"
      ],
      "ccc@zzz.com": [
        "test cz1"
      ]
    }
  }
]

そして実際にChatGPTに作成してもらった Pythonプログラムは以下の通りです。(すこし自分の環境に合わせて修正はしていますが。)

import csv
import json

# CSVファイルを読み込み、データを取得
# 
# 最初の部分では、mail_src.csv、mail_data.csv、url_data.csv という
# 3つのファイルをそれぞれ辞書形式に読み込みます。
# これにより、各ファイルのデータが辞書のリストとして取得されます。
# それぞれの辞書内には、CSVのヘッダーがキーとして使用され、
# 各行のデータがそれぞれの辞書として格納されます。

with open('mail_src.csv', 'r') as file:
    mail_src_data = list(csv.DictReader(file))
    
with open('mail_data.csv', 'r') as file:
    uid_data = list(csv.DictReader(file))

with open('url_data.csv', 'r') as file:
    dest_data = list(csv.DictReader(file))

# メールアドレスと件名をマッピングする辞書を作成
# 
# mail_src.csv ファイルの内容から、メールアドレスと件名のマッピングを
# 作成します。mail_subject_map という辞書を作成し、
# メールアドレスをキーにして、それに関連する件名をリストとして格納します。

mail_subject_map = {}
for entry in mail_src_data:
    mail = entry['mail-src']
    subject = entry['subject'].replace('\u201d', '').replace('\"', '')
    if mail in mail_subject_map:
        mail_subject_map[mail].append(subject)
    else:
        mail_subject_map[mail] = [subject]

# JSONデータを構築
#
# dest_data の情報を元にして新しい JSON データを構築します。
# 各行の情報を元に、dest_entry という辞書を作成し、'dest'、'state'、
# 'category'、'black'、'pc'、'uid'、'mail'というキーを持たせます。

json_data = []
for entry in dest_data:
    uid = entry['uid']
    mail = entry['mail']
    dest_entry = {
        'dest': entry['dest'],
        'state': entry['state'],
        'category': entry['category'],
        'black': entry['black'],
        'pc': entry['pc'],
        'uid': uid,
        'mail': mail,
        'mail-src': {}
    }
    # mail-src内のデータを整形
    #
    # 'mail-src' キーに関連する情報を整形します。
    # これは、mail_data.csv と mail_src.csv の情報を組み合わせ、
    # 指定された形式で'mail-src' キーの中身を構築するための処理です。

    if uid in [row['uid'] for row in uid_data]:
        mail_src = [x.strip() for x in next(row['mail-src'] for row in uid_data if row['uid'] == uid).split(',')]
        for src in mail_src:
            if src in mail_subject_map:
                dest_entry['mail-src'][src] = mail_subject_map[src]
    json_data.append(dest_entry)

# JSON形式に変換して出力
#
# json.dumps() を使用して json_output に JSON 形式のデータを出力します。
# これにより、json_output には指定された形式の JSON データが格納されます。
# そして、print(json_output) により、この JSON データが出力されます。

json_output = json.dumps(json_data, indent=2)
print(json_output)

人間が作るとなるとPythonに詳しい人でも数時間はかかりそうですが、ChatGPT は一瞬で作ってしまうところがすごいですね。

また、私はPython初心者なので、見たことないような関数を使われていると勉強になります。

CAMBLY で AI とのレッスンが無料で受けられると聞いてアカウント登録してみた

最近、Youtube や ブログなどで CAMBLY の AI との英語レッスンがすごい!との噂を聞きました。

しかもその AI レッスンは、CAMBLY のアカウントを作成するだけで無料で使えるとのことなので、試しにアカウントを作成しました。その時の記録をここに残しておきます。

結論としては、アカウントを登録する際にクレジットカードの情報を入れる必要もなく、手軽に使えることがわかりました。

以下にアカウント作成時の手順を記載しておきます。

CAMBLY のアカウント作成手順

まず以下のサイトにアクセスします。

CAMBLY
https://www.cambly.com/

するとCAMBLYのトップページが表示されますので、右上の「登録する」ボタンを押します。

CAMBLY トップページ

1.アカウントを登録する

アカウントの登録方法を選択する画面が表示されますので、好きな方法をアカウント登録を行います。

私は、お試しでアカウントを作成してみたいだけなので、右下のメールのアイコンを選択しました。

CAMBLY登録画面1

次にメールアドレスをパスワードを選択します。

CAMBLY登録画面2

最後に名前(ニックネーム)を登録します。

CAMBLY登録画面3

2.個人の情報を入力

ここから2ページに渡り、個人の情報をいれていきます。

まずは自分の英語力についてです。

CAMBLYパーソナライズ画面1

次に学習目標などを聞いてきます。

CAMBLYパーソナライズ画面2

3.勧誘ページをスキップ

最後に勧誘の画面が表示されます。

ここは興味がなければどんどんスキップしていきましょう。

CAMBLY勧誘画面1

次も勧誘ですのでスキップします。

CAMBLY勧誘画面2

4.CAMBLY ミニレッスンを選択

ここまでログインが完了したので、画面左下の「Camblyミニレッスン」を選択します。

CAMBLYログイン後トップ画面

するとAIとのレッスン画面に無事アクセスすることができました。

CAMBLY AI レッスン画面

こらから実際に使ってみたいと思います。

Open Interpreter を Macにインストールしようとしたらエラーがでた話

最近 Open Interpreterの記事をいろいろ見つけたので自分のMacにもインストールしようとしてみたところ、以下のようなエラーが出ました。

エラーが大量発生

% pip install open-interpreter
ERROR: Ignored the following versions that require a different python version: 0.0.1 Requires-Python >=3.10,<4.0; 0.0.2 Requires-Python >=3.10,<4.0; 0.0.21 Requires-Python >=3.10,<4.0; 0.0.22 Requires-Python >=3.10,<4.0; 0.0.221 ・・・
・・・
Requires-Python >=3.10,<4.0; 0.1.4 Requires-Python >=3.10,<4.0
ERROR: Could not find a version that satisfies the requirement open-interpreter (from versions: none)
ERROR: No matching distribution found for open-interpreter

Pythonのバージョンを3.10.0にアップして成功

結論としては、どうやら Macの Pythonのバージョンが Python 3.8.3 のままになっていたのが原因のようでした。

以下の要領で 3.10.0 にアップしたところ、Open Interpreterを正常にインストールすることができました。

% python --version
Python 3.8.3
% pyenv install -list
Available versions:
・・・
  3.10.0
  3.10-dev
  3.11-dev
・・・
  stackless-3.7.5
% pyenv install 3.10.0
python-build: use openssl@1.1 from homebrew
・・・
Installed Python-3.10.0 to /・・・/.pyenv/versions/3.10.0
% pyenv local 3.10.0
% Python -V
Python 3.10.0
% pip install open-interpreter
Collecting open-interpreter
  Downloading open_interpreter-0.1.4-py3-none-any.whl (35 kB)
・・・
WARNING: You are using pip version 21.2.3; however, version 23.2.1 is available.
You should consider upgrading via the '/Users/katsuhiro.kurita/.pyenv/versions/3.10.0/bin/python3.10 -m pip install --upgrade pip' command.

ChatGPT Code interpreterを使って直接スクレイピングはできないけど、スクレイピングするpythonは作成できる

ChatGPT Code interpreterはインターネットに繋がっていないので直接 Webサイトのスクレイピングコードを作成することはできないと言われています。

ただし、以下のような質問と、WebサイトからダウンロードしたHTMLを添付してあげることにより、<ほぼ>そのまま動作するpythonコードを作成してもらうことが可能です。

添付ファイルのWebサイトにアクセスし、トップページから特定の日付の記事のタイトルとリンクをデータを抜き出すpythonコードを作成してください。
なお、日付は自動的に昨日の日付を設定し、添付のファイルは以下のURLにあるものとしてください。https://www.xxxx.com/news/

以下、Code interpreterにて作成してもらった pythonプログラムです。

後半は手直しが必要な状態ですが、もう少しきちんと指示をしてあげればそのまま動作するpythonを作ってくれるのではなかと思います。

from datetime import datetime, timedelta
import requests
from bs4 import BeautifulSoup

# Set yesterday's date
yesterday = datetime.now() - timedelta(days=1)

# Initialize an empty list to store the articles
articles_yesterday = []

# URL of the top page
url = "https://www.xxxx.jp/news/"

# Get the HTML content of the top page
response = requests.get(url)
html = response.text

# Use BeautifulSoup to parse the HTML content
soup = BeautifulSoup(html, "html.parser")

# Find all <li> elements in the HTML
for li in soup.find_all("li"):
    # Find the <time> element in the <li> element
    time_element = li.find("time")
    if time_element:
        # Extract the date from the "datetime" attribute of the <time> element
        date_str = time_element["datetime"].split("T")[0]
        date = datetime.strptime(date_str, "%Y-%m-%d")

        # Check if the date of the article is yesterday
        if date == yesterday:
            # Find the <a> element in the <li> element
            a_element = li.find("a")
            if a_element:
                # Extract the title and the link of the article
                title = a_element.text
                link = a_element["href"]
                articles_yesterday.append((title, link))

# Print the articles of yesterday
for title, link in articles_yesterday:
    print(f"Title: {title}")
    print(f"Link: {link}\n")

SOARからChatGPTにアクセスするインテグレーションをYoutubeを見ながら作成してみた

すでに XSOAR には ChatGPT にアクセスする為のインテグレーションがありますが、Youtube をみるとそれを自作する動画があったので、勉強の為、真似して作成してみました。

ただし、Youtube の動画のPythonをそのまま利用してもエラーがでてしまったので、ChatGPT と相談しながら修正しました。

それ以外の詳しい手順は以下のYoutubeをご覧ください。

XSOAR Integration Creation for CHATGPT to Answer Questions – PurpleXsec

1.BYOIボタンを押す

まず、XSOAR にログインし、左下の settingsメニューから Integrations – instances に進みます。

すると右上に「+BYOI」ボタンが表示されるので、それを押します。

2.Integration Settingsを設定する

「+BYOI」ボタンを押すと、右側に Integration Settings が表示されるので、その中の、

・BASIC
・Parameters
・Commands

などの設定を Youtubeを見ながら実施していきます。

3.Pythonコードをサイトからコピペする

Youtube の中に出てくるPythonコードは以下のGitHubで公開されていますので、これをコピーし、左側にデフォルトで提供されるPythonコードと置き換えます。

https://github.com/vidura-supun/XSOAR-CHATGPT-Integration/blob/main/ChatGPT.py

4.Pythonコードを少し修正する

GitHubからコピーしてきたPythonコードをそのまま利用すると後述の Integrationの接続テストの際に、以下のエラーが発生してしまいます。

Authorization Error: make sure API Key is correctly set (85)

どうやら ChatGPT APIにアクセスするための認証ヘッダーの定義が Youtube 公開当時から変わった?ようなので、22行目を以下の通り書き換えます。

変更前
self._headers = {'Authorization': self.api_key, 'Content-Type': 'application/json'}
変更後
self._headers = {'Authorization': f'Bearer {self.api_key}' , 'Content-Type': 'application/json'}

あとで調べたのですが、ChatGPT ではAuthorizationヘッダを用いた Bearer認証というものを利用しているみたいですね。(BASIC認証の親戚みたいな感じですね。)

5.テスト接続する

4.の修正後、Integration設定画面から「Test」ボタンを押すと、以下のとおり正常に接続することができました。

XSOAR – Integration設定画面

この後問題なく「user_question」コマンドを実行することもできました。

Power AutomateからChatGPTが生成したpythonを実行させる

ChatGPT でpythonを自動生成してくれるので、それをPower Automateで自動的に動かせないかと思い、試してみました。

もしかしたらこれを一歩進めて、Power Automateから ChatGPT を呼び出してpython を自動生成させ、それをさらにPower Automateから自動実行させるみたいなことができるかもしれませんねー。

1.Power Automate Desktop(PAD)を起動

Windows 10 にインストールしたPower Automate Desktopを起動します。

Power Automate Desktop画面

2.PADでフローの作成開始

「+新しいフロー」を選択し、フロー名を設定後、「作成」を選択します。

Power Automate Desktop画面

3.ChatGPT で生成したPythonをファイルに保存

ChatGPT で生成したPythonをコピペしてファイルに保存しておきます。

保存したPythonプログラムを実行させるには、Windows 10に Pythonの実行環境とPythonプログラムの中で利用しているライブラリがインストールされている必要があります。

4.アプリケーションの実行を選択

ファイルに保存されているPythonプログラム(*.py)を実行する為、
左ペインの「アクション」から「システム」-「アプリケーションの実行」
を選択します。

Power Automate Desktop画面

5.アプリケーションとしてpythonを指定

「アプリケーションの実行」設定画面にて以下の通り設定します。

アプリケーションパス:python
コマンドライン引数:pythonプログラム名
作業フォルダー:pythonプログラム名を置いているディレクトリ

Power Automate Desktop画面

設定後、「保存」ボタンを押すと以下の画面となります。

Power Automate Desktop画面

6.Pythonの実行結果をメモ帳で表示

pythonの実行結果は作業フォルダーにファイルとして保存されるようになっている為、それをメモ帳で表示する処理を以下のとおり追加してみました。

Power Automate Desktop画面

ChatGPTのプラグイン WebPilotで指定したWebページのデータを抜き出してもらった

本日、ChatGPT plus のサブスクリプション契約を行い、Pluginが利用できるようになったので、さっそく WebPilotを使ってみました。

ちなみにChatGPT plusのサブスクリプションを契約したら、必要なPluginを個々にインストールする必要があります。

ChatGPT Plugin Store

なお、以前はPluginの利用は順番待ちだったようですが、現時点では、plus契約と同時に使えるようになっているみたいです。

さっそくWebPilotを試してみる

以下、情報を取得するURLを指定して https で始まる行を全て取得してもらった結果です。

ChatGPT

きれいに依頼したとおりの情報をとってくれました。

うまく依頼すれば、いろいろなサイトからセキュリティのIoC情報を拾ってきてくれそうですが、この場合も結局はスクレイピングしていることになるんでしょうね。

OpenAIのサイトからChatGPTのAPIキーを取得し、18ドル分の無償枠内で利用してみた。

SOARから ChatGPTにアクセスする為に、ChatGPTのAPIキーを取得してみましたので、その手順を記録しておきます。

なおAPIキーの取得に際しては、OpenAIのアカウントを事前に作成しておく必要があります。

また一見、 APIキーの利用は無償に見えますが、18ドル分の無償枠があるだけで、それを超えて利用しようとすると有償になるようですので注意が必要です。

1.OpenAIのサイトにアクセス

以下のURLからOpenAIのサイトにアクセスし、ブラウザの真ん中あたりに現れる「Get Started」のリンクをクリックします。

https://openai.com/product

するとログイン画面が現れるのでログインすると、以下のようなOpenAI のトップページが表示されます。

OpenAIトップページ

2.View API keysかAPIキーを作成

上の画面の右上にある「Personal」という部分をマウスでクリックすると「View API Keys」というリンクが出てくるのでそれを選択します。

すると、以下のAPI Keys の画面が表示されますので、ページの真ん中あたりにある「Create new secret key」をクリックします。

OpenAI – API Keys

その後、以下のポップアップが表示されるので、API keyに名前を付けます。

OpenAI – Ceate API Key

そして「Create secret key」のボタンを押せば、API Keyが生成され、同ポップアップ上に表示されます。(右に表示されるコピーボタンを押せば、コピーできます。)

OpenAI – Ceate API Key

なお生成されたAPI Keyは、先ほどのAPI Key ページに蓄積して表示されていくようです。

OpenAI – API Key

3.API Keyの利用には無償枠あり

上記の通り作成したAPI Keyを早速 SOAR で利用したところ問題なく利用できた為よろこんでいたのですが、実は API key の利用には18ドルの無償枠があるだけで、使い続けていると有償になるようです。

今どれくらい無償枠を利用したかについては、先ほどのページの左ペインのメニューの中から「Usege」を選択すると確認できます。

OpenAI – Usage

上の画像はSOARにて”Emotetってなんですか?”と質問し、ChatGPTから回答をもらった直後の状態ですが、0.0005ドルの無償枠を消費したようです。