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

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

ただいまの
回答率

88.62%

DiscordのBotでXMLHttpRequestをしてもレスポンドが全くない

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 313

zubo_mmh

score 9

DiscordでBotを作ろうと思って、以下のようなスクリプトを組みました。(一部抜粋ですので変数定義などが書かれていない可能性があります
流れとしてはgetRSSに引数として渡したYoutubeのIDからRSSのアドレスを作り、それをXMLHttpRequestで取得する形になります。

const XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
const URL = require('url').URL;
var xhr = new XMLHttpRequest();
xhr.timeout = 1000;
xhr.responseType='Atom';
xhr.withCredentials = true;
xhr.onloadstart = function(){
    console.log(`[Debug] XHR load started;`);
}
xhr.onload = function(){
    console.log(`[Debug] XHR Loaded.`)
    if(xhr.status != 200){
        console.log(`[Debug] ERROR : ${xhr.status} : ${xhr.statusText}`);
        return;
    }else{
        console.log(`[Debug] XHR done. \nData size:${xhr.responseText.length}`);
        let res=xhr.responseText;
        let name = res.substr(res.indexOf("<title>")+7,res.indexOf("</title>")-res.indexOf("<title>")-7);
        let newestID = res.substr(res.indexOf("<yt:videoId>")+12,res.indexOf("</yt:videoId>")-res.indexOf("<yt:videoId>")-12);
        syncname=name;
        syncID = newestID;
        return;
    }
}
xhr.onreadystatechange = function(){
    console.log(`[Debug] XHR ready state changed : ${xhr.readyState}`);
}
xhr.onprogress = function(event){
    console.log(`[Debug] XHR is now going...`);
    if(event.lengthComputable){
        console.log(`[Debug] XHR is now going ... \n now ${event.loaded} bytes : total ${event.total} bytes`);
    }else{
        console.log(`[Debug] XHR is now going ... \n now ${event.loaded} bytes`);
    }
}
xhr.onerror = function(){
    console.log(`[Debug] ERROR : XHR failed.`);
}
xhr.onabort = function(){
    console.log(`[Debug] Connection was aborted.`);
}
xhr.ontimeout = function(){
    console.log(`[Debug] Connection TImeout.`);
}
var getRSS = function(ID){
    console.log(`[Debug] Started to get RSS...`);
    let url = new URL('https://www.youtube.com/feeds/videos.xml');
    url.searchParams.set('channel_id',ID);
    console.log(`[Debug] Parsed url : ${url}`)
    xhr.open('GET' , url);
    xhr.send();
    return;
}

XMLHttpRequestは取得の際に四種類のイベントを返す可能性があると知ったので、

  • onload
  • onerror
  • onabort
  • ontimeout
    を受け取れるようにしました。
    また、onprogressで経過も見れるようにしました。(する予定でした

ところが、実際に動かしてみると

[Debug] Started to get RSS...
[Debug] Parsed url : https://www.youtube.com/feeds/videos.xml?channel_id=(ここにidが入る)
[Debug] XHR ready state changed : 1
[Debug] XHR ready state changed : 1
[Debug] XHR load started;


となってしまってなにかイベントが発生するわけでもなくonprogressのログが発生するわけでもなくといった状況で困っています。

DiscordのBotだからなのでしょうか?
JavaScriptは完全に初心者なので、教えていただけると助かります。

開発環境: Discord.js , Node.js , Visual Studio Code

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • hoshi-takanori

    2020/04/07 11:15

    普通に node で動かしたら動きましたけど、どうやって動かしてますか?

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 88.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る