1

別の Web ページで作成したスクリプトを使用して、Tumblr ブログから実際のコンテンツをすべてコピーしようとしていますが、コンテンツにアクセスするのに少し問題があります。私のajax呼び出しは次のとおりです。

$.ajax({
     url: "http://solacingsavant.tumblr.com/",
     dataType: 'jsonp',
     success: function(data) {
          var elements = $("<div>").html(data)[0].getElementsByTagName("ul")[0].getElementsByTagName("li");
          for(var i = 0; i < elements.length; i++) {
               var theText = elements[i].firstChild.nodeValue;
               alert(theText); // Alert if I got something
              // This is where I'll strip the data for the items I want
          }
     }
});

しかし、それはコンソールに「リソースはスクリプトとして解釈されましたが、MIME タイプ text/html で転送されました」というエラーが表示され、ここで調べてmeta、ブログの HTML の対応するタグを に変更しました<meta http-equiv="Content-Type" content="application/javascript; charset=utf-8" />が、成功しませんでした

私も使用してみdataType: 'html'ました(これは私にとってより理にかなっています)が、「オリジンはAccess-Control-Allow-Originによって許可されていません」というコンソールエラーが発生しました。これも調べて、Tumblrブログにメタタグを追加しました<meta Access-Control-Allow-Origin="*" />。しかし、再び成功しませんでした

これは、使用するjsFiddleです

Tumblr全体が変更を許可していないため、私のアプローチは機能しませんAccess-Controlか? もしそうなら、どうすれば問題を回避できますか? そうでない場合、私は何を間違っていますか?

主要な編集 (mikedidthis の有益なコメントに基づく)

Tubmlr API なしではこれを行うことができないようです。そのため、API キーを取得し、API が送信する json の結果にアクセスできるようになりました。コンソールで API キーを使用して jsonp オブジェクトを取得できます。現時点での私のJavaScript:

$.ajax({
    url: "http://api.tumblr.com/v2/blog/solacingsavant.tumblr.com/info?api_key=APIkeyGoesHeRe",
    dataType: 'jsonp',
    success: function(results){
        console.log(results); 
        // Get data from posts here
    }
});

この SO 投稿は、Tubmlr ページのデータをソースから変更し、サイトに関する基本情報を見つける方法を理解するのに役立ちましたが、個々の投稿から実際のデータを取得する方法については理解できませんでした。オブジェクトを調べてみましたresultsが、投稿に関連するデータを見つけることができず、結果を jsfiddle に追加することもできませんでした。したがって、私の質問は、「このアプローチを使用して、個々の投稿からデータ (投稿に書かれたテキストなど) をコピーできますか? もしそうなら、どのように? そうでない場合は、他のどのようなアプローチを使用すればよいですか?」

4

1 に答える 1

5

本当に素早い答え

tumblr API のドキュメントには、API の使用方法が詳しく説明されていますが、少し手始めとして、すべてのテキスト投稿を取得してみましょう。

まず、タイプがTextの投稿の API を照会する必要があります。

ドキュメント ( http://www.tumblr.com/docs/en/api/v2#posts ) には、次の URL を使用し、設定するタイプtextを指定する必要があると記載されています。

api.tumblr.com/v2/blog/solacingsavant.tumblr.com/posts[/type]

以下は、OPフィドルに基づく例です。

$.ajax({
    url: "http://api.tumblr.com/v2/blog/solacingsavant.tumblr.com/posts/text?api_key=XXXXXXX",
    dataType: 'jsonp',
    success: function(data){
        posts = data.response.posts
        $.each(posts, function(i) {
            console.log( posts[i].title, posts[i].body )
        });
    }
});

したがって、API のクエリごとに、オブジェクトが返されます。このオブジェクトから必要なデータを取得するには、このオブジェクトをフィルター処理する必要があります。

投稿クエリのコンテキストでは、オブジェクトを使用して投稿に直接アクセスできdata.response.postsます。

各投稿タイプで利用可能なデータを確認するには、次のドキュメントを参照してください: http://www.tumblr.com/docs/en/api/v2#text-posts

各Text投稿タイプのコンテンツを取得するには、オブジェクトをループしてから、 and という名前のキーの値を取得する必要がありpostsます。titlebody

例: http://jsfiddle.net/ZpFwL/

ボーナス タイムtypeURL から をドロップすることで、すべてのタイプの投稿を取得できます。

http://api.tumblr.com/v2/blog/solacingsavant.tumblr.com/posts/?api_key=XXXXXXX "

これは非常に簡単な例であり、現実世界向けではないことに注意してください。

于 2013-10-15T17:04:02.253 に答える