LoginSignup
5
3

More than 5 years have passed since last update.

Console_Commandlineが便利だった件

Posted at

Console_CommandLineが思いの外利用しやすかったので、TypeTalkにメッセージをPushするスクリプトでお試ししてみた。

composerで設定

composer.json
{
    "require": {
         "guzzle/guzzle": "*"
        ,"codeception/codeception": "*"
        ,"pear/pear_exception": "1.0.*@dev"
        ,"pear/console_commandline": "dev-trunk"
    }
}

設定値

config.php
//TypeTalkのID等

TypeTalk

typetalk.php
require_once './vendor/autoload.php';

use Guzzle\Http\Client;
use Guzzle\Http\Message\Request;
use Guzzle\Http\Exception\RequestException;

//アクセスTokenを取得する
//まとめのTalkID一覧を取得する
//メッセージをPushする
//...

pushする

addOptionで必須項目の設定について、分からなかった。

push.php
require_once './vendor/autoload.php';
require_once './config.php';
require_once './typetalk.php';

use Console\CommandLine;

$cmdline = new Console_CommandLine();
$cmdline->description = Configuration::CLI_DESCRIPTION;
$cmdline->version = Configuration::VERSION;

$cmdline->addOption('topic', array(
     'short_name' => '-t'
    ,'long_name' => '--topic'
    ,'description' => 'TypeTalk TopicID' . PHP_EOL . 'Default: ' . Configuration::DEFAULT_TOPIC_ID
    ,'help_name' => '{TopicID}'
    ,'action' => 'StoreInt'
    ,'default' => Configuration::DEFAULT_TOPIC_ID
));

$cmdline->addOption('talk', array(
     'short_name' => '-g'
    ,'long_name' => '--group'
    ,'description' => 'TypeTalk TalkID' . PHP_EOL . 'Default: ' . Configuration::DEFAULT_TALK_ID
    ,'help_name' => '{TalkID}'
    ,'action' => 'StoreInt'
    ,'default' => Configuration::DEFAULT_TALK_ID
));

$cmdline->addOption('message', array(
     'short_name' => '-m'
    ,'long_name' => '--message'
    ,'description' => 'TypeTalk Push Message' . PHP_EOL . 'Default: ' . Configuration::DEFAULT_MESSAGE
    ,'help_name' => '{Message}'
    ,'action' => 'StoreString'
    ,'default' => Configuration::DEFAULT_MESSAGE
));

try {
    $cmdlineResult = $cmdline->parse();

    $errors = array();

    $typeTalkTopicId = isset($cmdlineResult->options['topic']) ? trim($cmdlineResult->options['topic']) : '';
    $typeTalkTalkId = isset($cmdlineResult->options['talk']) ? trim($cmdlineResult->options['talk']) : '';
    $message = isset($cmdlineResult->options['message']) ? trim($cmdlineResult->options['message']) : '';

    if (!strlen($typeTalkTopicId)) $errors[] = 'TopicID is not null.'; //TopicIDは必須
    if (!strlen($message)) $errors[] = 'Message is not null.'; //メッセージは必須
    if (count($errors) > 0) throw new Exception(implode(PHP_EOL, $errors));

    $typeTalk = new TypeTalk(Configuration::TYPETALK_CLIENT_ID, Configuration::TYPETALK_CLIENT_SECRET);
    $talkIdList = $typeTalk->getTalkIdListByTopicId($typeTalkTopicId);

    if (!in_array($typeTalkTalkId, $talkIdList)) {
        //トピックに存在しないまとめIDが指定された場合はまとめナシとする
        //throw new Exception('Missing TalkId[' . $typeTalkTalkId . '] in Topic[' . $typeTalkTopicId . '].');
        $typeTalkTalkId = null;
    }

    $typeTalk->sendMessage($typeTalkTopicId, $typeTalkTalkId, $message, null);

} catch (Exception $e) {
    var_dump($e->getMessage());
}

実際に動かしてみる

php ./push.php --help
BearTalk CommandLine

Usage:
  push.php [options]

Options:
  -t {TopicID}, --topic={TopicID}    TypeTalk TopicID
                                     Default: {TopicID}
  -g {TalkID}, --group={TalkID}      TypeTalk TalkID
                                     Default: {TalkID}
  -m {Message}, --message={Message}  TypeTalk Push Message
                                     Default: デュフフフフ
  -h, --help                         show this help message and exit
  -v, --version                      show the program version and exit
5
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3