人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

日の出をツイートするプログラムを作ろうと考えています。
サーバーサイドで動作する小規模な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
このあたりの方法か、ライブラリ的な物でできそうなのでそれを使う予定です。

●質問者: x2pop
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●150ポイント ベストアンサー

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

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


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

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


x2popさんのコメント
自前でするならatコマンドが良さそうですね。確認までは考えていませんでした。 無限ループ方式はそんなにダメですか。 いつぞやにWindowsなんかのソフト(今回は違いますが)は、常にループして入力を待機していると聞いたので、常に条件に一致するか処理するような方式もあるのかなと。 もちろん毎回日の出を計算していたらCPUがフル稼働しそうなので、1回計算したら記録してその時刻を検知するまではほとんど何もしない感じにはなりそうなイメージではあります。 CGIをいじる程度だと、サーバーで無限ループだけはヤバイ、というのが染みついていて怖いのですが、あまり一般的な方法では無さそうですね。 参考になりました。ありがとうございます。

2 ● うぃんど
●150ポイント

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

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

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


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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ