質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

1233閲覧

webAPIを JSで引っ張りたい

Okkawa

総合スコア6

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2020/01/24 05:40

編集2022/01/12 10:55

前提・実現したいこと

電車遅延APIを使用してJavaScriptで遅延情報を表示させたい
最終的にはLINEbotに出力させる予定です。

電車遅延API→ https://rti-giken.jp/fhc/api/train_tetsudo/

該当のソースコード

JavaScript

1const ENDPOINT = 'https://tetsudo.rti-giken.jp/free/delay.json' 2const axios = require('axios'); 3 4const handleEvent = async event => { 5 // ガード節は1行でOK 6 if (event.type !== 'message' || event.message.type !== 'text') return; 7 usersRef.set(event.message.text); 8 9 let result = null; 10 11 const command = event.message.text; 12 switch (command) { 13 14 15 case '山手線': 16 17 async(userId, command) => { 18 const res = await axios.get(ENDPOINT); 19 const item = res.data; 20 let Tresult = item.filter((value) => { 21 return value.name === command 22 }) 23 console.log(Tresult) 24 if (Tresult.length > 0) { 25 await client.pushMessage(userId, result = { 26 type: 'text', 27 text: `たいへ〜ん!!${Tresult.name}は現在遅れが出ています!\n余裕を持って行動をしてくださいね!`, 28 }); 29 } else { 30 await client.pushMessage(userId, result = { 31 type: 'text', 32 text: `${command}は平常運転です。\n焦らず行動してください!`, 33 }); 34 } 35 } 36 break; 37 38 39 default: 40 result = { 41 type: 'text', 42 text: `${command}は不可能です。今後に期待して!!` 43 }; 44 } 45 46//お天気 47if (event.type !== 'message' || event.message.type !== 'text') return; 48 usersRef.set(event.message.text); 49 50 let result = null; 51 52 const command = event.message.text; 53 switch (command) { 54 case 'おはよう': //お天気情報取得 55 56 const city = '130010'; // 東京 57 const url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=' + city; 58 const res = await axios.get(url); 59 const item = res.data; 60 const link = "http://weather.livedoor.com/area/forecast/130010"; 61 // タイトル 62 var wheather1; 63 var wheather2; 64 // 今日、明日、明後日の天気 65 const today = item.forecasts[0]; 66 const tomorrow = item.forecasts[1]; 67 //天気予報を変数へ代入 68 wheather1 = today.dateLabel + ' :' + today.telop + NEW_LINE; 69 wheather2 = tomorrow.dateLabel + ' :' + tomorrow.telop + NEW_LINE; 70 71 72 console.log(wheather1 + wheather2); 73 result = { 74 type: 'text', 75 text: '[東京の天気]' + NEW_LINE + wheather1 + wheather2 + '↓詳細↓' + NEW_LINE + link 76 }; 77 78 break; 79

試したこと

livedoorのお天気webAPIを使用して天気を表示させる機能は完成していますが、電車遅延情報は仕様が違うのか
あまりよくわかりません。

補足情報(FW/ツールのバージョンなど)

プログラミング学習中の学生ですので、わかりやすく教えていただけると幸いです。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2020/01/24 05:45

まず、自分でここまで書いてみた、というソースコードを記載しましょう。 ですが、 https://tetsudo.rti-giken.jp/free/delay.json にアクセスすればわかると思いますよ。 livedoorのお天気webAPIで表示させることができたなら、 使い方はほぼ同じだと思うので、応用でいけると思いますが。
Okkawa

2020/01/24 06:18

ご指摘ありがとうございます。お天気APIのコードとそれを元に記述したコードを追記しました。 現在使用している、Linebotの運用にfirebaseを使用しているためfirebase内部のfunctionsに記載しているソースの一部を抜粋しています。 ご確認よろしくお願い致します。
miyabi_takatsuk

2020/01/24 07:33

ええと、このままだと、まるっきり、丸投げの質問になってしまうので、 ソースコードの掲示はできませんが、それでもいいですか? 電車遅延情報と言われても、情報が膨大なので、 何をどう表示したいのかを記載してくれないと回答しようがありませんし、 また、何をどう表示したいのかを記載をしていただいても、 このままだと、回答者にソースコードを丸っと作らせるような、丸投げの質問になります。 (作業依頼となって、本来お金をいただかないとしてもらえないような内容になるということ) なので、ソースコードではなく、考え方や、JSONの基本的な使い方のヒント、といった回答になりますが、 よろしいですか?
Okkawa

2020/01/27 06:52

返信遅くて申し訳ございません。 僕が望む機能はLINEで路線を入力するとその路線の情報を引っ張ってきて、「遅延しています」「遅延していません」 と返信するようなものです。ソースコードを更新しました。 switch文を使用して"山手線"とうつとその運行情報を返信する機能が欲しいです。 jsonのデータの読み取り方がいまいちよくわかりません。 よろしくお願い致します。
Takumiboo

2020/01/27 08:19

天気の方ではどのように処理しているのでしょうか。同じことを路線でやるだけだと思うのですが。
Okkawa

2020/01/27 15:37

天気のソースも追記しました。 データの呼び出しは天気と同じだと思うのですが、お天気APIは天気といったら明日明後日の天気予報がテキストで返ってくる仕組みになっています。livedoorのお天気APIにはプロパティ名の記載があり、必要なデータをその指定して引っ張れるのでデータの指定が容易に出来ました。 電車遅延情報は指定のテキスト(○○線)と送信したら、「○○線は現在遅延しています。」もしくは「遅延していません」 のような情報が欲しいのですがその情報がどのプロパティ名に値するのか、が分からず求めている値が返ってきません。お力になっていただけたら幸いです。
miyabi_takatsuk

2020/01/27 19:38

> 電車遅延情報は指定のテキスト(○○線)と送信したら、「○○線は現在遅延しています。」もしくは「遅延していません」 > のような情報が欲しいのですがその情報がどのプロパティ名に値するのか このような情報は、当該JSONにはまったく含まれておりません。 JSONの中には、日付のタイムスタンプは含まれていますので、その情報を上手く使うしかないでしょうね。
miyabi_takatsuk

2020/01/28 02:39 編集

申し訳ございませんが・・・、 質問者さんの現段階の構築力レベルでは、応用は難しいと思います。 もっと簡単な構文で、JSONの性質やAPIでのやり方を学び習得されてから臨むべきかと。 偶然飛び箱横十段飛べたが、次は縦で十段飛んでみたい、と言っているようなもんです。(つまり飛び方わかってないとクリアできない) まずJSONの扱い方の基本を学んでからにしましょう。
guest

回答1

0

最初に申し上げますと、質問者さんの動作環境を再現できたわけではないので、動作保証はしておりません。
ので、どう言った形で取得されているかどうかは、カンになります。
ご了承ください。
また、100%、そのまま書いても動作しません
あくまで、何がデータとして取り出されているかの推測を記載しただけです。
あとはうまく使って頑張ってください。

javascript

1const ENDPOINT = 'https://tetsudo.rti-giken.jp/free/delay.json' 2const axios = require('axios'); 3 4const handleEvent = async event => { 5 // ガード節は1行でOK 6 // event が配列型で取得されているなら、下記がifが永久に真になりますので、それ以下の処理は永久に通りません。 7 // よって、例外処理は、わかりませんので、ご自分でいろいろ試してください。 8 // if (event.type !== 'message' || event.message.type !== 'text') return; 9 10 let result; 11 // 配列形式として、走査 12 event.forEach(val => { 13 // valには、jsonから取得した配列の一個一個が格納される、とする 14 // 以下の処理は、質問者さんでしか再現できないようなので、valに何が入るのかだけ記載します。 15 /* 16 val = { 17 name: "八高線", 18 company: "JR東日本", 19 lastupdate_gmt: 1580111117, 20 source: "鉄道com RSS" 21 } 22 */ 23 // 上記形式が、各路線ごとに、順番に呼び出されます。 24 // あとは頑張ってください。 25 }); 26 27};

投稿2020/01/27 08:18

miyabi_takatsuk

総合スコア9528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問