on{X}で学校に「来た」「帰った」を勝手にツイートするレシピつくった

こんにちは! 先日, 紹介したon{X}ですが独自拡張が出始めてます. 熱い!

どちらともアプリを入れたり, 認証が必要だったりしますが, それを補って余りあるほど面白いです. 今回は,学校に「来た」「帰った」を勝手にツイートするレシピを公開します.

レシピのコード

    var location = { name : "college", latitude : "36.66227", longitude : "136.73950" };
    var state_enter = "enable";
    var state_leave = "disable";
    var twitter = { screenName : "YOUR SCREEN NAME",onxToken : "YOUR TOKEN" } ;
     
    // End of variables initializing
     
    console.log('Started script.');

    // create a geo region for the trigger to take place at
    var region = device.regions.createRegion({
        latitude: parseFloat(location.latitude, 10),
        longitude: parseFloat(location.longitude, 10),
        name: location.name,
        radius: 250
    });
    
    function tweet(text) {
        text = encodeURI(text);
        
        // Sends tweet using TweetOn{X}
        device.ajax(
            {
                url: 'http://tweetonx.com/api/tweet/'+twitter.screenName+'/'+twitter.onxToken+'/?t='+text,
                type: 'GET',
                headers: { 'Content-Type': 'application/xml' }
            },
            function onSuccess(body, textStatus, response){
                var parsedBody;
                if(!body){
                    var error = {};
                    error.message = 'invalid body format';
                    error.content = body;
                    console.error('error: ',error);
                }
                console.info('Status: ' + body);
            },
            function onError(textStatus, response){
                var error = {};
                error.message = textStatus;
                error.statusCode = response.status;
                console.error('error: ',error);
            }
        );
    }
     
    // register a callback to set volume for stream on entering/exiting the region
    region.on("enter", function () {
        tweet('学校に来ました (on{X}からの自動投稿)');
    });
     
    region.on("exit", function() {
        tweet('学校を出ました (on{X}からの自動投稿)');
    });
     
    // start monitoring the region
    device.regions.startMonitoring(region);
    console.log('Completed script');

疑問と感想

  • なんでAPIのHTTPメソッドがGETなんだろう...ここはPOSTでは.(てか, セキュリティ大丈夫か?)
  • 学校の近くに線路があるから, radius(m)を適切に決めないといけない. radiusの値次第で電車に乗っているときにツイートしてしまう.
  • 自分の身の回りのことをプログラミングしている感覚が面白い