日の出をツイートするプログラムを作ろうと考えています。

サーバーサイドで動作する小規模なCGI的な物しか作った事が無く、計算した時刻にツイートをする方法について、スマートな方法が思いつきません。今のところ思いついたのは

1.(翌日の)日の出を計算して、atコマンドを呼び出し指定した時刻に「日の出です」とツイートするプログラムを登録・実行させる

2.任意の時間に起動したプログラムで日の出までの残り時間を計算しそれまでずっとsleep(でいいのか?)する

3.無限ループするタイプ(?)のプログラムを作り、指定時刻と一致したらツイートする

cronなどで1分おきに起動させて…という方法はあまりにも美しくないので避けたいです。

上記のような方法、またはもっと良いと思われる方法で良い書き方があれば例を挙げて教えて頂けると幸いです。参考になるプログラムでもかまいません。

・環境など
さくらVPS CentOS6.4
言語 Python 3.3.x / PHP / Perlのいずれかだと嬉しい
日の出はあくまで一例ですが、これの計算は
http://php.net/manual/ja/function.date-sunrise.php
このあたりの方法か、ライブラリ的な物でできそうなのでそれを使う予定です。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/11/14 20:40:36
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント150pt

ぼくなら、(1) の at コマンドを選ぶ。
日の出の時刻だけ計算して、こんなコマンドを実行するだけだし、コマンドの内容をぺろっと出しておけば、デバッグも簡単。

at -f ジョブ内容 6:20 tomorrow


負荷をかけない、という意味では (2) の sleep と似たようなものですけど、開発段階で、明日の何時に動くはずだ、というのが atq コマンドで確認できるのが良い。
間違ってたら、削除もできる。

最悪なのは (3) の無限ループ。
何もしてないのに、CPU だけ喰ってる。
一分ごとに cron で起動するよりも悪い。

id:x2pop

自前でするならatコマンドが良さそうですね。確認までは考えていませんでした。

無限ループ方式はそんなにダメですか。
いつぞやにWindowsなんかのソフト(今回は違いますが)は、常にループして入力を待機していると聞いたので、常に条件に一致するか処理するような方式もあるのかなと。
もちろん毎回日の出を計算していたらCPUがフル稼働しそうなので、1回計算したら記録してその時刻を検知するまではほとんど何もしない感じにはなりそうなイメージではあります。

CGIをいじる程度だと、サーバーで無限ループだけはヤバイ、というのが染みついていて怖いのですが、あまり一般的な方法では無さそうですね。
参考になりました。ありがとうございます。

2013/11/13 19:16:11

その他の回答1件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154ここでベストアンサー

ポイント150pt

ぼくなら、(1) の at コマンドを選ぶ。
日の出の時刻だけ計算して、こんなコマンドを実行するだけだし、コマンドの内容をぺろっと出しておけば、デバッグも簡単。

at -f ジョブ内容 6:20 tomorrow


負荷をかけない、という意味では (2) の sleep と似たようなものですけど、開発段階で、明日の何時に動くはずだ、というのが atq コマンドで確認できるのが良い。
間違ってたら、削除もできる。

最悪なのは (3) の無限ループ。
何もしてないのに、CPU だけ喰ってる。
一分ごとに cron で起動するよりも悪い。

id:x2pop

自前でするならatコマンドが良さそうですね。確認までは考えていませんでした。

無限ループ方式はそんなにダメですか。
いつぞやにWindowsなんかのソフト(今回は違いますが)は、常にループして入力を待機していると聞いたので、常に条件に一致するか処理するような方式もあるのかなと。
もちろん毎回日の出を計算していたらCPUがフル稼働しそうなので、1回計算したら記録してその時刻を検知するまではほとんど何もしない感じにはなりそうなイメージではあります。

CGIをいじる程度だと、サーバーで無限ループだけはヤバイ、というのが染みついていて怖いのですが、あまり一般的な方法では無さそうですね。
参考になりました。ありがとうございます。

2013/11/13 19:16:11
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント150pt

(4)cronで毎日一度だけ起動する

自身が直接ツイートするのではなく、
毎日定時に起動して日の出時刻の計算を行い、
予約投稿サービスにポストする形にすれば楽。

POSTするだけで予約できるサービスの例
http://twitdelay.net/

id:x2pop

なるほど。外部のサービスを利用するという方法は思いつきませんでした。
毎日1:00ならその時に起動して日の出を計算、外部サービスに登録して終了という感じですね。
なるほど。大変参考になりました!

2013/11/13 19:12:28

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません