Node.js에서 특정 기차 지연 정보를 LINE에 전송
환경
필요한 패키지 설치
아래 패키지를 설치합니다.
도스
npm install axios
npm install querystring
지연 정보를 JSON으로 얻는 모듈
지연 정보는 이쪽의 API를 사용하였습니다.
철도 지연 정보 json
deley.jslet https = require('https');
const URL = 'https://rti-giken.jp/fhc/api/train_tetsudo/delay.json';
const Deley = function () {};
Deley.prototype.getDeleyData = function () {
return new Promise(function (resolve) {
https.get(URL, (res) => {
let body = '';
res.setEncoding('utf8');
res.on('data', (chunk) => {
body += chunk;
});
res.on('end', (res) => {
res = JSON.parse(body);
resolve(res);
});
}).on('error', (e) => {
console.log(e.message);
});
});
};
module.exports = Deley;
http 모듈도 https 모듈도 get 메소드가 비동기이므로, 간단하게 호출해도 대단히 다루기 어렵다고 하는···
그런 때에 Promise가 도움이 된다고 하는 것으로, 이런 느낌으로 해 보았습니다.
아래의 LINE 모듈은 axios를 사용하지만, 여기는 axios를 사용하지 않고 원시 Promise로 작성합니다.
LINE에 게시하는 모듈
line.jsconst axios = require('axios');
const querystring = require('querystring');
const Line = function () {};
Line.prototype.setToken = function (token) {
this.token = token;
};
Line.prototype.notify = function (text) {
// トークンチェック
if (this.token == undefined || this.token == null) {
return;
}
// 投稿
axios({
method: 'post',
url: 'https://notify-api.line.me/api/notify',
headers: {
Authorization: `Bearer ${this.token}`,
'Content-Type': 'application/x-www-form-urlencoded',
},
// リクエストデータの生成にquerystringを使用
data: querystring.stringify({
message: text,
}),
})
.then(function (res) {
console.log(res.data);
})
.catch(function (error) {
console.error(error);
});
};
module.exports = Line;
게시해보기
실제로 게시하려면 【공식】LINE Notify 에서 토큰을 발급해야 합니다.
발행한 토큰은 setToken()
의 인수에 건네주세요.
index.jsconst Line = require('./line');
const Deley = require('./deley');
const myLine = new Line();
const myDeley = new Deley();
// LINE Notify トークンセット
myLine.setToken("トークン文字列");
// 遅延情報を取得
myDeley.getDeleyData().then(function(res){
res.forEach(function(data){
// LINE Notify 実行
if(data.name == "東海道線" || data.name == "上野東京ライン"){
myLine.notify("現在、" + data.name + "が遅延しています。");
}
});
});
이번은 제가 자주 사용하는 도카이도선과 우에노 도쿄 라인의 지연 정보만을 통지하고 있습니다.
(코딩한 날은 어느 선도 실제로 15분 정도 지연이 일어났습니다.)
Heroku에 배포하고 IFTTT라든지 아침 7:00, 저녁 18:00라든지 API 두드리면 가파른 전철 지연에도 대응할 수 있다! ?
참고
let https = require('https');
const URL = 'https://rti-giken.jp/fhc/api/train_tetsudo/delay.json';
const Deley = function () {};
Deley.prototype.getDeleyData = function () {
return new Promise(function (resolve) {
https.get(URL, (res) => {
let body = '';
res.setEncoding('utf8');
res.on('data', (chunk) => {
body += chunk;
});
res.on('end', (res) => {
res = JSON.parse(body);
resolve(res);
});
}).on('error', (e) => {
console.log(e.message);
});
});
};
module.exports = Deley;
line.js
const axios = require('axios');
const querystring = require('querystring');
const Line = function () {};
Line.prototype.setToken = function (token) {
this.token = token;
};
Line.prototype.notify = function (text) {
// トークンチェック
if (this.token == undefined || this.token == null) {
return;
}
// 投稿
axios({
method: 'post',
url: 'https://notify-api.line.me/api/notify',
headers: {
Authorization: `Bearer ${this.token}`,
'Content-Type': 'application/x-www-form-urlencoded',
},
// リクエストデータの生成にquerystringを使用
data: querystring.stringify({
message: text,
}),
})
.then(function (res) {
console.log(res.data);
})
.catch(function (error) {
console.error(error);
});
};
module.exports = Line;
게시해보기
실제로 게시하려면 【공식】LINE Notify 에서 토큰을 발급해야 합니다.
발행한 토큰은 setToken()
의 인수에 건네주세요.
index.jsconst Line = require('./line');
const Deley = require('./deley');
const myLine = new Line();
const myDeley = new Deley();
// LINE Notify トークンセット
myLine.setToken("トークン文字列");
// 遅延情報を取得
myDeley.getDeleyData().then(function(res){
res.forEach(function(data){
// LINE Notify 実行
if(data.name == "東海道線" || data.name == "上野東京ライン"){
myLine.notify("現在、" + data.name + "が遅延しています。");
}
});
});
이번은 제가 자주 사용하는 도카이도선과 우에노 도쿄 라인의 지연 정보만을 통지하고 있습니다.
(코딩한 날은 어느 선도 실제로 15분 정도 지연이 일어났습니다.)
Heroku에 배포하고 IFTTT라든지 아침 7:00, 저녁 18:00라든지 API 두드리면 가파른 전철 지연에도 대응할 수 있다! ?
참고
const Line = require('./line');
const Deley = require('./deley');
const myLine = new Line();
const myDeley = new Deley();
// LINE Notify トークンセット
myLine.setToken("トークン文字列");
// 遅延情報を取得
myDeley.getDeleyData().then(function(res){
res.forEach(function(data){
// LINE Notify 実行
if(data.name == "東海道線" || data.name == "上野東京ライン"){
myLine.notify("現在、" + data.name + "が遅延しています。");
}
});
});
Reference
이 문제에 관하여(Node.js에서 특정 기차 지연 정보를 LINE에 전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tsumasakky/items/f423455f372cd38434da텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)