TwitterとMastodonに同時配信するツールを作成
2023.07.08
おはようございます。先日、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.webp", 'image/png', "image.png.webp"));
$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);
}
}
}
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
'User-Agent', API, application, array, Authorization, Bearer, Content-type, curl, false, isset, json_decode, mastodon, multipart, qiita, quot, Twitter, VERIFYHOST, トイウコトデ, トゥート, ユーザーエージェント,
ワードプレスの自動タグ生成するプラグイン再開発。 #wp #tag
2022.12.12
おはようございます、今年もあと半分とちょっとですね、月曜日のたわわ☕。
さて、今日はワードプレスの自動タグ生成するプラグイン再開発しましたってお話です、この自動タグを生成するツールは以前、作っていたのですがYahoo!APIのバージョンアップに伴い使用出来なくなっていました。その為、プラグインを更新しV2対応をこの度、行ったって話です。もともと日本語記事のタグ自動生成するものは存在していたのですが、それがエラーで使用出来なくなり自分で開発したのが今に至っています。
プラグインをダウンロードして使いたい方は、zipファイルを解凍し解凍したフォルダをサーバーのプラグイン置き場にアップロードすることにより使用出来るようになります。尚、前手順としてYahoo!APIのアプリケーションIDの取得を行う必要があります。
プラグインをダウンロードしたくないという方のためにソースコードを一部貼っときます。
if (isset($appid)) {
$endpoint = "https://jlp.yahooapis.jp/KeyphraseService/V2/extract";
$headers = [
"Content-Type: application/json",
"User-Agent: Yahoo AppID: ".$appid,
];
$param = [
"id"=> time(),
"jsonrpc" => "2.0",
"method" => "jlp.keyphraseservice.extract",
"params" => [
"q"=>preg_replace("/https?:([a-zA-Z0-9|\/|_|\-|%|@|\*|\.|\?|&|=]){0,}/m","",$content)
]
];
$curl=curl_init($endpoint);
curl_setopt($curl,CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl,CURLOPT_POSTFIELDS, json_encode($param));
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl,CURLOPT_RETURNTRANSFER, TRUE);
$response = json_decode(curl_exec($curl));
if (isset($response->result->phrases)) {
foreach ($response->result->phrases as $keys=>$word) {
if ($word->text) {
$tags[] = $word->text;
}
if (is_array($tags)) {
wp_set_post_tags($post_id, implode(",", array_unique($tags)), false);
}
}
}
}
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
application, false, foreach, gt, headers, implode, isset, jlp, json_decode, json_encode, keys, PARAM, phrases, quot, quot;User-Agent, response, result, Text, true, VERIFYHOST,
goo-labのひらがな化API雛形を作りました。
2021.05.17
goo-labのひらがな化API雛形を作りましたので、お裾分けです。YOUTUBEで解説している事を抜粋して記載します、まずAPIとはアプリケーションプログラミングインターフェイスの略です。APIを簡単に解説するとAというデータを送るとAのデータを処理して何らかの結果を返却してくれるサービスを言います。
今回のひらがな化APIは漢字の文字をひらがな(カタカナ)に変換して返却してくれるサービスです。自分が作った部分はひらがな化APIのサーバにデータを送信して返却データをキャッチする部分になります。APIというのはどんなAPIも同じようなものですので、一度、理屈を分かってしまうと簡単なものです。
因みにディファインの部分を自分のAPIに変更してお使いください、尚、コマンドラインから実行するように設計しています。
<?php
define("APIKEY","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
class Hieagana{
public function main($str="漢字が混ざっている文章"){
if(!$str){return false;}
$headers = array(
"Content-Type: application/x-www-form-urlencoded",
);
// app_id(必須項目) アプリケーションID
// request_id リクエストID
// 省略時は"labs.goo.ne.jp[タブ文字]リクエスト受付時刻[タブ文字]連番"となります。
// sentence(必須項目) 解析対象テキスト
// output_type (必須項目) 出力種別
// hiragana(ひらがな化)、katakana(カタカナ化)のどちらかを指定してください。
$params = [
"app_id"=>APIKEY,
"sentence"=>$str,
"output_type"=>"hiragana"
];
$curl = curl_init("https://labs.goo.ne.jp/api/hiragana");
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
$output = (object)json_decode(curl_exec($curl));
curl_close($curl);
var_dump($output);
}
}
if($argv[0]){
(new Hieagana)->main($argv[1]);
}
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
$params, APIKEY, application, argv, array, decode, false, goo.ne.jp, headers, hiragana, katakana, labs, lt, object, php define, quot, VERIFYHOST, youtube, アプリケーションプログラミングインターフェイス, コマンドライン,