TwitterとMastodonに同時配信するツールを作成

2023.07.08

Logging

おはようございます。先日、Twitter民がAPI制限で表示がされない問題が起きていた時に、TwitterとMastodonに同時配信するツールを作っていました。普通につぶやくのは前にコードを作っていましたので、それを流用して簡単に出来るなぁなどと思いながら作っていたら画像も添付した状態でつぶやきたいという欲が出てきて沼にハマりました。

Twitterの方は画像添付のつぶやきも簡単にできたものの、Mastodonで沼にハマりました。PHPにはcurlのメソッドがあります、これを使用してAPIに指示を出す感じです。ドキュメントにはヘッダーとともに必須項目を送信すればトゥート(つぶやける)できるよと記載されていたのだけど、実際はユーザーエージェントの値も送信しないと上手く動作しない仕様になっていました。

これはちょっと酷くない?と思いながら数時間悩み、その後、パラメーターの文字化けするという問題に沼にハマりここで数分悩んでいました。結局、全て自己解決したのですが調べても生成AIを頼っても答えが出ない場合は、今までの自分の知識や経験がある方が優位だなって感じました。

トイウコトデ、Qiitaでも掲載したのですがこちらでも解決策を記載します。

<?php
class Mastodon
{
    const host = "mstdn.jp";
    const endpoint1  = "/api/v1/statuses";
    const endpoint2  = "/api/v1/media";

    public function toot($text){
        $data = array('file' => new CURLFile("/var/www/html/t_m/image.png", 'image/png', "image.png"));
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://" . self::host . self::endpoint2);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['User-Agent: ' . $_SERVER['HTTP_USER_AGENT'], 'Content-Type: multipart/form-data', 'Authorization: Bearer ' . MSTDN_ACCESSTOKEN]);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        $response =   json_decode(@curl_exec($ch));
        curl_close($ch);
        if (isset($response->id)) {
            $postdata = [
                "visibility" => "public",
                "media_ids" => [$response->id],
                "status" => strip_tags($text),
            ];
            $data = json_encode($postdata);
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, "https://" . self::host . self::endpoint1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_HTTPHEADER, ['User-Agent: ' . $_SERVER['HTTP_USER_AGENT'], 'Content-Type: application/json', 'Authorization: Bearer ' . MSTDN_ACCESSTOKEN]);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            $response =  @curl_exec($ch);
            curl_close($ch);
        }
    }
}

タグ

'User-Agent', API, application, array, Authorization, Bearer, Content-type, curl, false, isset, json_decode, mastodon, multipart, qiita, quot, Twitter, VERIFYHOST, トイウコトデ, トゥート, ユーザーエージェント,

オレオレ認証SSL化、ワンツーコマンドで出来る。

2020.11.09

Logging

mkcertというものを使うとワンツーコマンドぐらいでオレオレ認証SSL化が出来てしまいます。尚、mkcertをインストールするにはHomebrew(ホームブルー)がインストールされている事が前提です。

リナックスではHomebrewをインストール前手順として、gitとrubyがインストールことが、前提となります。あと、nss-toolsも入っていなかったら入れる必要があります。こちらを入れて下記のコマンドでインストールします。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

次にHomebrew、コマンドよりmkcertをインストールします。(※コマンド登録は割愛します!!)

brew install mkcert

ローカル環境に認証局を作成してSSL認証を発行すれば終わりです。

mkcert -install
mkcert example.com

その場所に生成が終わるとファイルが出来ているので、そのpemファイルをApacheのVirtualHostで設定している場合は下記のように設定しApacheを再起動してあげればブラウザ(FirefoxかChrome)で見ると鍵認証が付いている状態になります。/etc/hostsのファイルの設定もお忘れなく。

<VirtualHost *:443>
  ServerName example.com
  DocumentRoot /var/www/html/example.com
  SSLEngine on
  SSLProtocol all -SSLv2
  SSLCertificateFile /home/tanaka/example.com.pem
  SSLCertificateKeyFile /home/tanaka/example.com-key.pem
</VirtualHost>

タグ

-fsSL, bash, bin, brew, C++, com, curl, git, githubusercontent, Homebrew, https, install, master, mkcert, nss-tools, quot, raw, Ruby, sh, SSL, インストール, オレオレ, こちら, こと, コマンド, ブルー, ホーム, もの, リナックス, ローカル, ワンツー, 下記, , 作成, 前提, 割愛, , 必要, 手順, , 環境, 登録, 認証,

CURLでページを抽出するのは簡単なのだけど・・・POSTして

2015.05.13

Logging


curlでページを抽出するのは簡単なのだけど、いま自分がやりたいことはSSLのサイトにデータをPOSTしてその結果を加工して表示させたいわけなのですが・・・。どうもPOSTする際にデータがうまく渡せてなくてエラー結果のページが表示されるのです。未だ問題が解決せず・・・・。うまく行かない・・・時間だけが流れてしまうので今日のトコロはやらない方法ですが、うまく行けばそのサイトを公表します。結構便利なサイトになるかと思っているのですが当分、無理な感じがします。

タグ

, curl, POST, POSTする際, SSH, SSL, エラー結果, サイト, データ, トコロ, ページ, 当分, 方法, 時間, 未だ問題,

Facebookが消えてもTwitterは生き残りそうな予感とcurlの事をメモ書き(´∀`)。

2015.01.19

Logging


 
Facebookが消えてもTwitterは生き残りそう気がします。自分はFacebookの活動をしていません(アカウントはあります)。この頃、Facebookの活動をしてみようかなとか若干、考えてます。友達申請とかして友達増やしていくと、それに時間を費やする時間が発生するのでそこがネックだったりもします。「いいね」ボタンはある意味良くて困りもの。そういう面ではLINEはいいとこ取りなSNSですね。流行したわけが何となくわかります。Twitterが生き残りそうな理由ですけど匿名性が高い気楽に使える情報発信ツールだからです。
昨日、curlっていうリナックスのコマンドをさくらレンタルサーバーのスタンダードで使用できるかなってTera Term(DLこちら)を使用してさくらレンタルサーバーにログインして打ってみました。curl https://zip358.com って感じに打つと結果が返ってきました(こんな感じの結果)。スタンダード版で打てるとは思わなかったのでびっくりしました。トイウコトデ、POSTも出来ます、こんな感じにcurl -d “memo=memomemo!!” https://zip358.com と打つとsubmit(提出:送信)されます。なんで、実はwgetとかも使用できるのではと思ったわけです、打ってみると使用できます。viも使用できたりします・・・。よくよく考えるとさくらの技術サポートさんが使うためにある程度インストールしてるみたい。ちなみにps ax | more でプロセス見たりプロセスをkillコマンドで消す事もできます。
 
この頃、技術系ネタが多かったので明日は少しソフトなネタを書こうと思います(´Д`)。
 

タグ

curl, Facebook, killコマンド, memomemo, ps ax, submit, Twitter, wget, アカウント, さくらレンタルサーバー, スタンダード版, トイウコトデ, プロセス, めちゃくちゃ, メモ書き, リナックス, , 匿名性, 情報発信ツール, 技術サポート, 活動,