Twitter用の投稿時自動ツイートを実施(コチラ)しましたが、今回はMastodon用の投稿時自動トゥートを作ってみました。
Pixivが運営するMastodonサービス「Pawoo」に投稿する仕組みを入れてみました。
参考にさせていただいたサイトはこちらです。
- 【投稿編】Mastodon (マストドン) PHPで外部から投稿してみようかとテストをしてみました | ねんでぶろぐ
- 【画像編】Mastodon (マストドン) PHPで外部から画像付き投稿してみようかとテストをしてみました | ねんでぶろぐ
上記サイトで、Mastodonへの基本的な動作が書かれています。
というか、ほぼこれがすべてです。
これを元に、前回のTwitter版をベースに作成しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | //公開時にトゥート function tootImage($new_status, $old_status, $post){ require_once TEMPLATEPATH.'/func_mastodon/autoload.php'; $t = new \theCodingCompany\Mastodon(); //ステータスが「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); |