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

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

ただいまの
回答率

88.91%

外部RSSを取得できません

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,327

dandelion

score 7

前提・実現したいこと

javascriptのみでrssを読みこむプログラムを作っています。

「jquery.xdomainajax.js」を使うと
クロスドメインを突破できることを知り、
導入をしてみたのですが、rssを取得できませんでした。

同一ドメインのrssでの読み込みは成功するのですが、
外部ドメインのrssになると読み込めませんでした。

環境は無料ブログです。なので、「.php」や「.htaccess」
は使えません。

外部のrssをどうしても読み込めなくて困っています。

発生している問題・エラーメッセージ

外部のrssファイルを読み込めない。

該当のソースコード

test.html

<html>
<head>
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Style-Type" content="text/javascript" />
<link href="test.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript" src="test.js" charset="shift_jis"></script>
<script type="text/javascript" src="jqueryxdomainajax.js"></script>
</head>
<body>
<div class="feedset1"><div id="feederogch0"></div></div>
<div class="feedset1"><div id="feederogch2"></div></div>
<div class="feedset1"><div id="feederogch4"></div></div>
<div class="feedset1"><div id="feederogch6"></div></div>
<div class="feedset1"><div id="feederogch8"></div></div><div class="clean"></div>
<div class="feedset1 feedset2"><div id="feederogch1"></div></div>
<div class="feedset1 feedset2"><div id="feederogch3"></div></div>
<div class="feedset1 feedset2"><div id="feederogch5"></div></div>
<div class="feedset1 feedset2"><div id="feederogch7"></div></div>
<div class="feedset1 feedset2"><div id="feederogch9"></div></div><div class="clean"></div>
</body>
</html>

test.js

var now = (new Date()).getTime();
function initialize()
{
    var myAry = ["feederogch0","feederogch1","feederogch2","feederogch3","feederogch4","feederogch5","feederogch6","feederogch7","feederogch8","feederogch9"];
    gazoiri("●●/?xml",myAry);
}
function gazoiri(flink,e)
{
    var tcontent = test(flink);
    tcontent.done(function(result)
    {
        var container = [];
        var icount = 0;
        for(var i = 0; i < e.length; i++){container[i] = document.getElementById(e[i]);}
        $(result).find("item").each(function()
        {
            var itm = $(this);
            var lnk = itm.find('link').text();
            var txt = itm.find('title').text();
            var im  = [];
            var dt  = [];

            itm.children().each(function()
            {
                im = itm.find('content\\:encoded').text();
            });            
            itm.children().each(function()
            {
                dt = itm.find('dc\\:date').text();
            });
            var htmlstr1 = [];
            var htmlstr2 = [];
            var entdate = new Date(dt).getTime();
            if(icount < 5)
            {
                if(entdate < now)
                {
                    var img = get_img(im);//img取り出し用関数
                    if(img == ''){img = imgTmp(img,30);}
                    var title = cut_str(txt);//文字数調整用関数
                    set_mozi(htmlstr1,1,lnk,txt,title);//html用に文字列を形成する関数
                    set_mozi(htmlstr2,2,lnk,img,txt);
                    set_html(container[icount*2],htmlstr1);//htmlに反映する関数
                    set_html(container[icount*2+1],htmlstr2);
                }
            }
            icount++;
        });
    });
}
function test(flink)
{
    return $.ajax
    ({
        type: 'GET',
        url: flink,
    });
}
function get_img(content)
{
    var img = '';
    var tmp1 = content.indexOf("src");
    if(tmp1 != -1)
    {
        var tmp2 = content.indexOf("\"",tmp1+5);
        if(tmp2 != -1)
        {
            var temp = content.slice(tmp1+5,tmp2);
            var imgT = new Image();
            imgT.src = temp;
            img = '<img src=' + temp;
        }
    }
    var img1 = img.indexOf("http://");
    if(img1 == -1){img = '';}
    return img;
}
function imgTmp(img,gazoNo)
{
    if(gazoNo == 30){img = '<img src="image/noimage.gif"';}
    return img;
}
function cut_str(title)
{
    if(title == ''){var tmp = '無題';}
    else
    {
        if(title.length > 15){var tmp = title.slice(0,15)+'…';}
        else{var tmp = title;}
    }
    return tmp;
}
function set_mozi(htmlstr,flag,str1,str2,str3)
{
    if(flag === 1)
    {
        htmlstr.push('◆<a href="');
        htmlstr.push(str1);
        htmlstr.push('" target="_blank" title="');
        htmlstr.push(str2);
        htmlstr.push('" >');
        htmlstr.push(str3);
        htmlstr.push('</a>');
        htmlstr.push('<br />');
    }
    else if(flag === 2)
    {
        htmlstr.push('<a href="');
        htmlstr.push(str1);
        htmlstr.push('" target="_blank">');
        htmlstr.push(str2);
        htmlstr.push(' alt="');
        htmlstr.push(str3);
        htmlstr.push('" /></a>');
    }
}
function set_new(htmlstr,str,entdate)
{
    var newmark = "";
    var pastTime = 86400000;
    if(now >= entdate && now <= (entdate + pastTime)){newmark ='<strong style="color:red">new!</strong>';}
    htmlstr.push(' ');
    htmlstr.push(changeDate(str));
    htmlstr.push(' ');
    htmlstr.push(newmark);
    htmlstr.push(' ');
}
function changeDate(str)
{
    var t1="/";
    var t2=":";
    var t3=" ";
    var myDate=new Date(str);
    var YY=myDate.getFullYear()-2000;
    var MM=myDate.getMonth()+1;if(MM<10){MM="0"+MM;}
    var DD=myDate.getDate();if(DD<10){DD="0"+DD;}
    var hou=myDate.getHours();if(hou<10){hou="0"+hou;}
    var min=myDate.getMinutes();if(min<10){min="0"+min;}
    var sec=myDate.getSeconds();if(sec<10){sec="0"+sec;}
    var date=YY+t1+MM+t1+DD+t3+hou+t2+min+t2+sec;
    return date;
}
function set_html(container,htmlstr){container.innerHTML = htmlstr.join("");}
google.setOnLoadCallback(initialize);

試したこと

・「jquery.xdomainajax.js」を読み込む
・$.ajax内に「dataType:json」を追加したが、結果は読み込めませんでした。現在は外してあります。

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

より詳細な情報

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • dandelion

    2017/03/02 14:42 編集

    回答ありがとうございます。上記のURLに書いてあったネットワークモニターで該当のRSSファイルを開いて確認したところ、一つはステータス「200」を、もう一つはステータス「304」を返しておりました。

    キャンセル

  • masaya_ohashi

    2017/03/02 16:11

    レスポンスの中身をネットワークモニターで確認してください。レスポンスの中身が空ならなにかアクセスに問題があり、中身があるならスクリプトのどこかに問題があることになります。

    キャンセル

  • dandelion

    2017/03/02 18:07

    回答ありがとうございます。応答の確認はできております。中身も空ではないようなので、javascript内部に間違いがありそうです。もう少しプログラム内を確認したいと思います。

    キャンセル

回答 1

checkベストアンサー

+1

読み込み順が逆では?

<script type="text/javascript" src="jqueryxdomainajax.js"></script>
<script type="text/javascript" src="test.js" charset="shift_jis"></script>

追記:

【Chrome デベロッパーツール Networkパネルの使い方 | Web Tips】
http://weback.net/utility/1491/

【JavascriptのChromeでのデバッグ方法個人的まとめ2016 - Qiita】
http://qiita.com/snoguchi/items/8f6bb62a3166eca23ac3#networknetworkで通信をチェック

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/02 19:53

    【RSS - 静的なページに(ワードプレスが入っていない)RSSを読み込みたい(67732)|teratail】
    https://teratail.com/questions/67732

    こちらにYQLを直接たたく方法が提案されているのですが、一度試してみてはいかがでしょう。

    キャンセル

  • 2017/03/02 20:02

    ありがとうございます。

    試してみます。

    キャンセル

  • 2017/03/19 16:25

    kei344さんありがとうございました。

    教えていただいたページを参考に
    jquery.xdomainajax.jsを改造したところ
    正常に表示することができました。

    キャンセル

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

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

関連した質問

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