チャットワークのAPIを使ってみました.プロンプトでほぼ書いています.

2025.07.13

Logging

おはようございます.チャットワークのAPIを使ってみました.プロンプトでほぼ書いたコードになります、チャットGPTの無料版にリファレンスのURLリンクとPHPのクラス化、リターンに$thisで返却出来る所は$thisを使用してスマートにコードを書いてと指示を出しました.

出来上がったコードが下記になります.ソースコードは自分の方でモンキーテスト的に動かしてみましたが、ちゃんと動作するようです.

<?php
class ChatworkClient
{
    private string $apiToken;
    private string $baseUrl = 'https://api.chatwork.com/v2';
    private int $retryCount = 3;
    private int $retryDelay = 1000000; // microseconds

    public function __construct(string $apiToken)
    {
        $this->apiToken = $apiToken;
    }

    public function setRetry(int $count, int $delayMicroseconds): self
    {
        $this->retryCount = $count;
        $this->retryDelay = $delayMicroseconds;
        return $this;
    }

    private function request(string $method, string $path, array $params = []): array
    {
        $attempts = 0;

        while ($attempts < $this->retryCount) {
            $attempts++;

            $ch = curl_init();
            $url = $this->baseUrl . $path;

            if ($method === 'GET' && $params) {
                $url .= '?' . http_build_query($params);
            }

            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

            $headers = ['X-ChatWorkToken: ' . $this->apiToken];

            if (in_array($method, ['POST', 'PUT', 'DELETE'])) {
                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
                curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
                $headers[] = 'Content-Type: application/x-www-form-urlencoded';
            }

            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

            $body = curl_exec($ch);
            $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            $error = curl_error($ch);
            curl_close($ch);

            if ($error) {
                if ($attempts < $this->retryCount) {
                    usleep($this->retryDelay);
                    continue;
                }
                throw new RuntimeException("cURL error after {$attempts} attempts: {$error}");
            }

            if ($status >= 200 && $status < 300) {
                return [
                    'status' => $status,
                    'body' => $body ? json_decode($body, true) : null,
                ];
            }

            if ($attempts < $this->retryCount && $status >= 500) {
                usleep($this->retryDelay);
                continue;
            }

            return [
                'status' => $status,
                'body' => $body ? json_decode($body, true) : null,
            ];
        }

        throw new RuntimeException("Request failed after {$this->retryCount} attempts");
    }

    public function setToken(string $token): self
    {
        $this->apiToken = $token;
        return $this;
    }

    public function me(): array
    {
        return $this->request('GET', '/me');
    }
    public function getMyStatus(): array
    {
        return $this->request('GET', '/my/status');
    }
    public function getMyTasks(array $filters = []): array
    {
        return $this->request('GET', '/my/tasks', $filters);
    }
    public function getContacts(): array
    {
        return $this->request('GET', '/contacts');
    }
    public function getRooms(): array
    {
        return $this->request('GET', '/rooms');
    }
    public function createRoom(array $params): array
    {
        return $this->request('POST', '/rooms', $params);
    }
    public function getRoom(int $roomId): array
    {
        return $this->request('GET', "/rooms/{$roomId}");
    }
    public function updateRoom(int $roomId, array $params): array
    {
        return $this->request('PUT', "/rooms/{$roomId}", $params);
    }
    public function deleteRoom(int $roomId, string $action = 'leave'): array
    {
        return $this->request('DELETE', "/rooms/{$roomId}", ['action_type' => $action]);
    }

    public function getMembers(int $roomId): array
    {
        return $this->request('GET', "/rooms/{$roomId}/members");
    }
    public function updateMembers(int $roomId, array $params): array
    {
        return $this->request('PUT', "/rooms/{$roomId}/members", $params);
    }

    public function getMessages(int $roomId, bool $force = false): array
    {
        return $this->request('GET', "/rooms/{$roomId}/messages", ['force' => $force ? 1 : 0]);
    }

    public function postMessage(int $roomId, string $body, bool $selfUnread = false): self
    {
        $this->request('POST', "/rooms/{$roomId}/messages", ['body' => $body, 'self_unread' => $selfUnread ? 1 : 0]);
        return $this;
    }

    public function markRead(int $roomId): self
    {
        $this->request('PUT', "/rooms/{$roomId}/messages/read");
        return $this;
    }

    public function markUnread(int $roomId): self
    {
        $this->request('PUT', "/rooms/{$roomId}/messages/unread");
        return $this;
    }

    public function getMessage(int $roomId, int $messageId): array
    {
        return $this->request('GET', "/rooms/{$roomId}/messages/{$messageId}");
    }

    public function getRoomTasks(int $roomId, array $filters = []): array
    {
        return $this->request('GET', "/rooms/{$roomId}/tasks", $filters);
    }

    public function createTask(int $roomId, array $params): array
    {
        return $this->request('POST', "/rooms/{$roomId}/tasks", $params);
    }

    public function uploadFile(int $roomId, string $filePath, string $message = ''): array
    {
        if (!file_exists($filePath)) {
            throw new InvalidArgumentException("File not found: {$filePath}");
        }

        $ch = curl_init();
        $url = $this->baseUrl . "/rooms/{$roomId}/files";
        $cfile = curl_file_create($filePath);

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-ChatWorkToken: ' . $this->apiToken]);
        curl_setopt($ch, CURLOPT_POSTFIELDS, ['file' => $cfile, 'message' => $message]);

        $body = curl_exec($ch);
        $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        if (curl_errno($ch)) {
            throw new RuntimeException(curl_error($ch));
        }

        curl_close($ch);
        return ['status' => $status, 'body' => json_decode($body, true)];
    }
}

人が今回のコードを書いた場合、早い人でも10分ぐらいはコードを書かないといけないと思います、どんなに早くてもそれぐらいの時間は必要だと思いますが、生成AIはこれを数十秒で書ける訳ですから、確実に時間短縮になります.

なので人工知能が使える現場は間違いなく最初のコード出力は人工知能に任せた方が良いです.特に新規案件の土台は生成AIに任せると開発コストは削減出来ます.

明日へ続く

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

```, クラス, コード, コスト, これ, スマート, ソース, それ, チャット, テスト, プロンプト, モンキー, よう, リターン, リファレンス, リンク, ワーク, 下記, 人工, 今回, 使用, 出力, 削減, 動作, 土台, 場合, 必要, 指示, 新規, 明日, 時間, 最初, 案件, 無料, 現場, 生成, 知能, 短縮, 確実, 自分, 返却, 開発, 間違い,

映画 #007ノー・タイム・トゥ・ダイを観てましたので感想を残しときます。

2021.10.02

Logging

昨日、インターネットが繋がらなくて映画の感想を書くことが出来なかったので、本日、感想を残しときます。尚、インターネットの繋がらなかった原因は電柱の光回線が消耗(摩耗)していた事が原因だったみたいです。

さて、映画、007ノー・タイム・トゥ・ダイの感想を残しときます。率直に言えばジェームズ・ボンドの時代はもう・・・・なんだなぁとしみじみして観てしまいましたね。エンドクレジットを最後まで見たらリターンという文字が書いているから・・・もしかしたら、もしかするかもと思っていますがどうなんですかね(ネタバレ過ぎるかな?この書き方!?)。今後に期待ですね??

因みに今回の007は過去の作品を見ていないと全然意味がわからないと思うですよ、表面的なストーリーは読み取れても過去の作品を見ていないとわからないと思います。なので劇場に足を運ぶ前に、ここ数年の過去の作品を観といてくださいな。そうすることにより意味はわかるわぁ?になります。

ラストシーンは言えないですが是非映画館で楽しんでくださいね?。

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

007, インターネット, エンド, クレジット, ここ, こと, ジェームズ, ストーリー, だい, タイム, ドゥ, なん, ノー, ほんと, リターン, , 今回, 今後, 作品, 光回線, , 劇場, 原因, 意味, 感想, 摩耗, , 文字, 映画, 昨日, 時代, 書き方, 最後, 期待, 本日, 消耗, 率直, , 過去, 電柱,

お金の増やし方を教えてくださいっていう本を読んで。

2017.10.16

Logging


お金の増やし方を教えてくださいという本を読んで
難しい内容をこんな自分でも分かるように明快に書いている本だなという印象を
持ちました。お金の増やすためにはどうすればよいのかという事を
明確に書いていて、そして「こうすれば良い」と適切なアドレスしている本はない。
ちなみに自分はロボ・アドバイザーで運用していますが、
まぁまぁな利益を得てます。3ヶ月で100万円投資してリターンは5万程度と考えて
もらって大丈夫です。景気に変動されますのでずっと利益が出るわけではないですが
じぶんで選んで投資するよりかは、AI(人工知能などや機械学習)などを活用して
投資するほうが安全かなと思っています。
何故か?
いまの市場って個人で売買しているひとよりも、
人工知能や機械学習、プログラムで売買している割合が高いのです。
なので、じぶんはロボアドバイザーを選択したわけです。
ちなみに8割ほど「お金の増やし方」を読みましたがロボ・アドバイザーに関しては
まったくふれていません。
持論::今後、日本で起こりうる事の中にインフレが有るのでは?
お金の価値が下がることが今後、かなりの確率で起こると
じぶんは思っています。その時、貯金に預けっぱなしではお金の価値が
下がり、もしかしたら老後に困ることになるかもしれないと思ったのがキッカケ。
もしインフレが起きれば・・・投資しても
お金の価値はトントンになるのではないかなと思っています。

著者名  @taoka_toshiaki

※この記事は著者が30代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

いまいち, インフレ, お金, キッカケ, じぶん, プログラム, リターン, ロボ・アドバイザー, 人工知能, 価値, 利益, 割合, 増やし方, 持論, 景気, 本だな, 機械学習, 老後, 貯金,

Photo by fauxels on Pexels.com

未来永劫*痛くない人。

2016.12.09

Logging


経営者は痛みを伴うが社員は痛みを伴わない。
何社も渡り歩くと見えてくるものが在る、社長さんにはいろいろなタイプの人がいます、中小企業に多いのはワンマン社長が多い、特に高知県はそういう傾向が強いですね。
ワンマン経営の悪いところは社員が痛みを伴わないこと、良くも悪くも社長にかかってくる。社員が痛みを伴うことは辞めるときぐらいしかない。
一番、大事になるのは社員に任せると委ねるの狭間が一番重要になってくるだと思う。
一番の効率のよい方法はナニモシナイコトダと言う事、仕事を請け負って他社に丸投げすれば効率よく儲かるがそれって面白いですか?という事を真鍋大度 氏が言っていました。
じゃ効率って何だろうという観点から見えてくるもの、効率よくするには一番は単価割れしないこと、10万の仕事が1日で終われば単価割れしないが20日も月日がかかると単価割れする。
ただ、工数がかかっても汎用的に使えれば元を取ることができる。
汎用的に使用できるものは、少しカスタマイズすれば使用できるがオーダーメイドの場合はカスタマイズが難しいため元が取りにくい。
仕事と工数と単価の関係が一番の大事になってくると思います。
おそらくこれが、うまく出来ていていれば会社がうまく廻る。単価を下げると仕事は取ることは出来るが、経営は赤になりやすい。単価を下げ納品までに仕上げれば黒になる。
結局、社員の頑張りにかかってくるだと思う。
巡り巡っててかえってくる。
経営ってのは難しいだろうなって。
志がなければ、なかなか出来ないだろうと感じます。
トイウコトデ、今日は忘年会です。

未来永劫痛みを伴わない社員はリスクが少ないので、結果大きなリターンにはならない。

著者名  @taoka_toshiaki

※この記事は著者が30代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

オーダーメイド, カスタマイズ, トイウコトデ, ナニモシナイコトダ, リスク, リターン, ワンマン社長, 中小企業, , 傾向, 効率, 単価, , 月日, 未来永劫痛み, 狭間, 真鍋大度, 社長, 納品, 観点,