Skip to content

Instantly share code, notes, and snippets.

@sasairc
Last active November 11, 2018 12:03
Show Gist options
  • Save sasairc/0b7095c1aa1fc3278e49a0b69f515c6c to your computer and use it in GitHub Desktop.
Save sasairc/0b7095c1aa1fc3278e49a0b69f515c6c to your computer and use it in GitHub Desktop.
アドベントカレンダーの執筆状況を定期的にTwitterへポストする

アドベントカレンダーの執筆状況を定期的にTwitterへポストする

この記事はおさむん家 Advent Calender 2049 の記事であると同時に、「アドベントカレンダーの執筆状況を定期的にDiscordへポストする」への便乗記事です。

といっても新API対応版 lsoac の副産物なので、ほとんど違いはありません。

もともとは sasairc_yasuna の検証で使っていたアカウントです。今 twitter に登録するには携帯電話が必要なんですね・・・苦肉?の策。

中身

advent-notifier-for-twitter

最新記事の番号を標準入出力で扱っている理由は 手抜き だからです。

#!/usr/bin/perl
#
# Copyright (c) 2018 sasairc
# Released under the MIT license.
# see https://github.com/sasairc/lsoac/blob/master/LICENSE
#

use strict;
use warnings;
use utf8;
use Encode;
use JSON;
use YAML::Tiny;
use LWP::UserAgent;
use Net::Twitter::Lite::WithAPIv1_1;

my $url = "https://script.google.com/macros/s/AKfycbzNeGkemsTOvDs80HnIvNRx_PYq9Sh58BA9dSur_iLbjZNTVuY/exec";

sub do_tweet
{
    my $sender;

    $sender = Net::Twitter::Lite::WithAPIv1_1->new (
        consumer_key        => '',
        consumer_secret     => '',
        access_token        => '',
        access_token_secret => '',
        ssl => 1,
    );

    return $sender->update(decode_utf8($_[0]));
}

sub main()
{
    my ($day, $ua, $res, $data, @data_arr);

    $day = <>;    # 標準入力から前回の day を読み込む 現時点での最新記事は 1430
    $ua = LWP::UserAgent->new;  # UA を初期化
    $res = $ua->get($url, "accept" => "application/json");  # はちよんさん謹製の API を利用 (便利)
    $data = JSON->new()->utf8(0)->decode($res->content);    # JSON 形式なのでパース
    @data_arr = @{$data->{posts}};    # 記事構造は posts フィールドに格納されている
    foreach (@data_arr) {    # ぐるぐる回す
        if ($_->{url} && $day < $_->{day}) {
            #
					  # 記事の番号が新しかったらツイート その段階の day も保存しておく
            #
            $day = $_->{day};
            do_tweet("$_->{title} by $_->{author}: $_->{url}\n");
        }
    }
    # 最後の day を標準出力し終了
    print $day;
}

main();

crontab

上記の理由により、 crontab がえらく長い。でも登録したら弄らないので平気。

*/10 * * * *  sh -c "cd ~/advent-notifier-for-twitter && cat latest | ./advent-notifier-for-twitter > latest2 && mv latest2 latest"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment