CREATIVE HUB

Loading

本文へ移動

BLOG

[Tips] 投稿時画像付き自動SNSアップ(Mastdon版)(WordPress)

TipsWordPressTipsWordPress 259 views

Twitter用の投稿時自動ツイートを実施(コチラ)しましたが、今回はMastodon用の投稿時自動トゥートを作ってみました。
Pixivが運営するMastodonサービス「Pawoo」に投稿する仕組みを入れてみました。

参考にさせていただいたサイトはこちらです。

上記サイトで、Mastodonへの基本的な動作が書かれています。
というか、ほぼこれがすべてです。

これを元に、前回のTwitter版をベースに作成しました。


//公開時にトゥート
function tootImage($new_status, $old_status, $post){
require_once TEMPLATEPATH.'/func_mastodon/autoload.php';
$t = new theCodingCompanyMastodon();
//ステータスが「publish」(公開)になったとき。$new_statusだけの判定だと更新ボタンを押しただけでツイートされてしまうので「publishじゃない記事」が「publishになったとき」にツイートするようにしている
if($new_status == 'publish' && $old_status != 'publish'){

//ツイートするテキスト(字数は定型文やハッシュタグを使う場合は適宜調整が必要)
//ここでは「ブログ書きました:記事タイトル... URL #カテゴリ名」というフォーマットにしています

//カテゴリ名取得
//カテゴリ名をハッシュタグにしている
//$cat = get_the_category($post[0]->ID);
//タグ名取得に変更
$cat = get_the_tags($post->ID);
error_log(print_r($cat, TRUE));
$cat_text = '';
foreach($cat as $val){
$cat_text .= '#' . $val->name . PHP_EOL;
}
error_log(print_r($cat_text, TRUE));
if(strpos($cat_text,'R18') !== false){
$sensitive = 1;
}else{
$sensitive = 0;
}

//アイキャッチ取得
//$file = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'thumbnail' );
$file = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'thumbnail' );
$fullsize_path = get_attached_file( get_post_thumbnail_id($post->ID) );
//error_log(print_r($file, TRUE));

// サムネイル画像の取得パスがURLのみのため変換
$file = str_replace( "https://www.a-legend.net/" , "/var/www/html/" , $file);

//error_log(print_r($file, TRUE));

//アイキャッチがなかったらダミー画像を入れとく
//ない場合は画像添付なしでツイートするとか、カテゴリによってダミー画像を切り分けるなど一考の余地がある
if($file){
$file = $file[0];
} else {
$file = '/var/www/html/images/logo_500x500.png';
}

$image = file_get_contents( $file );
$imagesize = getimagesize( $file );
$upload_image = base64_encode($image);

// 2枚目画像(ランダム選択)
$input = array(
'/var/www/html/images/blog-upload-01.jpg',
'/var/www/html/images/blog-upload-02.jpg',
'/var/www/html/images/blog-upload-03.jpg',
'/var/www/html/images/blog-upload-04.jpg',
);
$rand_keys = array_rand($input);
$file2 = $input[$rand_keys];

$image2 = file_get_contents( $file2 );
$imagesize2 = getimagesize( $file2 );
$upload_image2 = base64_encode($image2);

// 画像アップロード
$media_ids = array();

$response = $t->PostMedia( $file );
$media_ids[] = $response['id'];
$response = $t->PostMedia( $file2 );
$media_ids[] = $response['id'];

//error_log(print_r($response, TRUE));

//文字数計算(140-「ブログ書きました:」 - 「...」- ハッシュタグ文字数 - 短縮URLの文字数(半角23文字))
//だが、念のため130文字で収まるようにしている
//$count = 130-mb_strlen('ブログ更新しました:')-mb_strlen($cat_text)-23;
$count = 260-mb_strlen('ブログ更新しました:')-mb_strlen($cat_text);

$update_toot = mb_strimwidth('ブログ更新しました:' . $post->post_title . PHP_EOL .'投稿日:'.mysql2date('Y.n.j', $post->post_date), 0, $count, "...") . PHP_EOL . $cat_text . get_permalink($post->ID);

$statusses = $t->PostStatuses($update_toot,'public',$media_ids,$sensitive);
//var_dump($statusses);
error_log(print_r($statusses, TRUE));

}

}
//アクションフック
//transition_post_statusは記事のステータス(公開や下書きなど)が変わった時に発動します
add_action('transition_post_status', 'tootImage',11,3);