2012-05-10 68 views
0

這是JSON輸出如何從JSON獲取地理座標? Twitter的API

{ 
    "created_at": "Wed, 09 May 2012 22:13:32 +0000", 
    "from_user": "EastCClothing", 
    "from_user_id": 119699125, 
    "from_user_id_str": "119699125", 
    "from_user_name": "Tester23", 
    "geo": { 
    "coordinates": [ 
     54.9742, 
     -1.5974 
    ], 
    "type": "Point" 
    }, 
    "id": 200347799861198850, 
    "id_str": "200347799861198849", 
    "iso_language_code": "pt", 
    "metadata": { 
    "result_type": "recent" 
    }, 
    "profile_image_url": "http://a0.twimg.com/sticky/default_profile_images/default_profile_0_normal.png", 
    "profile_image_url_https": "https://si0.twimg.com/sticky/default_profile_images/default_profile_0_normal.png", 
    "source": "<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>", 
    "text": "#CM0655 GEO", 
    "to_user": null, 
    "to_user_id": 0, 
    "to_user_id_str": "0", 
    "to_user_name": null 
}, 

我所試圖做的就是座標的保持,這樣我可以與谷歌地圖API的使用他們,我什麼能夠訪問所有其他細節很好,但不能通過我所期望的'json.results [i] .geo.coordinates'來訪問座標。這裏是我的JQuery

$(function(){ 
    function searchTweets() { 
     var url='http://search.twitter.com/search.json?callback=?&q=cm0655'; 
     $.getJSON(url,function(json){ 


      var output = []; 


      for (var i = 0, len = json.results.length; i < len; i++) { 


       output.push('<p id="tweet"><img id="tweetImage" src="' + json.results[i].profile_image_url + '" width="48" height="48" /><span id="tweetText">' + '<a href="http://twitter.com/' + json.results[i].from_user + '">' + json.results[i].from_user + "</a> " + json.results[i].text + "<br />" + json.results[i].created_at + '</p>' + json.results[i].geo.coordinates + '</span>'); 
      } 

      $("div.twitter2").html(output.join('')).slideDown('slow'); 
     }); 
    } 


    var timer = setInterval(searchTweets, 20000); 


    searchTweets(); 

}); 

非常感謝

+0

你可以發佈你正在得到的錯誤嗎? – BananaNeil

+0

沒有錯誤,只是不會顯示任何東西,當我嘗試 'json.results [I] .geo.coordinates' ,當我嘗試 'json.results [I] .geo' 它顯示的翻譯: –

+0

我編輯了我的答案,可能會幫助您調試? – BananaNeil

回答

1

對不起,以前的失敗我已經找到了解決方案,您需要做的是檢查results.geo是一個對象,然後循環,如果不排除或將其設置爲別的東西我做這個

什麼

免責聲明這是非常不是最好的解決方案,但它是一個工作之一,讓您瞭解如何解決問題。希望能幫助到你!

$(function() { 
    function searchTweets() { 
     var url = 'http://search.twitter.com/search.json?callback=?&q=from:Eastcclothing'; 
     $.getJSON(url, function(json) { 

      console.log(json); 
      var output = []; 


      for (var i = 0, len = json.results.length; i < len; i++) { 

       if ($.isPlainObject(json.results[i].geo)) { 
        output.push('<p id="tweet"><img id="tweetImage" src="' + json.results[i].profile_image_url + '" width="48" height="48" /><span id="tweetText">' + '<a href="http://twitter.com/' + json.results[i].from_user + '">' + json.results[i].from_user + "</a> " + json.results[i].text + "<br />" + json.results[i].created_at + '</p>' + json.results[i].geo.coordinates + '</span>'); 
       } else { 
        output.push('<p id="tweet"><img id="tweetImage" src="' + json.results[i].profile_image_url + '" width="48" height="48" /><span id="tweetText">' + '<a href="http://twitter.com/' + json.results[i].from_user + '">' + json.results[i].from_user + "</a> " + json.results[i].text + "<br />" + json.results[i].created_at + '</p>' + json.results[i].geo + '</span>'); 
       } 
      } 

      $("div.twitter2").html(output.join('')).slideDown('slow'); 
     }); 
    } 


    var timer = setInterval(searchTweets, 20000); 


    searchTweets(); 

});​ 

還幫繼承人工作的jsfiddle http://jsfiddle.net/th3fallen/jc2Kf/

+0

你是先生,是我的英雄嗎?單詞不能解釋我多麼感恩! –

+0

也許你可以進一步幫助我,那麼我將如何獲得協調到一個變量用於其他地方? –

+0

你想每個人位置在它自己的變量中或者只是一個si一個? –

0

我認爲你正在因爲你試圖來連接的陣列與一個字符串的問題,你可能需要做的是這樣的:

...+"["+json.results[i].geo.coordinates[0]+","+json.results[i].geo.coordinates[1]+"]"+... 

而不僅僅是

...+json.results[i].geo.coordinates+... 

或試試這個:

if (json.results[i].geo) console.log('<p id="tweet"><img id="tweetImage" src="' + json.results[i].profile_image_url + '" width="48" height="48" /><span id="tweetText">' + '<a href="http://twitter.com/' + json.results[i].from_user + '">' + json.results[i].from_user + "</a> " + json.results[i].text + "<br />" + json.results[i].created_at + '</p>' + "["+json.results[i].geo.coordinates[0]+","+json.results[i].geo.coordinates[1]+"]" + '</span>'); 

甚至:

if (json.results[i].geo) console.log($('<p id="tweet"><img id="tweetImage" src="' + json.results[i].profile_image_url + '" width="48" height="48" /><span id="tweetText">' + '<a href="http://twitter.com/' + json.results[i].from_user + '">' + json.results[i].from_user + "</a> " + json.results[i].text + "<br />" + json.results[i].created_at + '</p>' + "["+json.results[i].geo.coordinates[0]+","+json.results[i].geo.coordinates[1]+"]" + '</span>')); 

,並確保HTML看起來是正確的。

我注意到的另一個問題是,您正在關閉您的</span>標記,之前您的</p>標記,這是無效的HTML。我不認爲這是你的問題(可能是?),但你應該修復它。

+0

感謝您的快速響應,仍然沒有快樂我很害怕 –

+0

不知道console.log應該做什麼,但它會刪除所有輸出,仍然沒有得到任何2片斷。我感謝你的幫助,但還有什麼想法? 我重新安排了HTML,但按照預期的那樣對功能沒有任何作用 –

+0

console.log將打印出瀏覽器控制檯中的文本。在瀏覽器中,如果您單擊查看 - > Deveoper - > JavaScript控制檯,然後再次運行您的代碼,則應該在控制檯中輸出文本。 – BananaNeil

2

我想我會添加$。每個方法,以防萬一有人去了這條道路。

// The code below uses the Twitter API found here https://dev.twitter.com/docs to search for the latest mention of CM0655 (module code). 

    var twitterURL = "http://search.twitter.com/search.json?q=%23CM0655"; 
    function twitterSearch() { // Create the weather function 
     $.ajax({ 
     url: twitterURL, //http request string for the weather service 
     dataType: "jsonp",                         
     success: function(JSON) {      // If successful parse the JSON data 
      $('#twitterSearch').html(""); 
      $.each(JSON.results, function(i,tweet){ 
        var tweeterID = tweet.from_user_id; 
        var dateFormat = tweet.created_at; 
        var newDate = dateFormat.replace('+0000', ''); 
        var title  = 'title="Tweeted from"'; 
        var id   = tweet.id; 
        var locData = tweet.geo; 
        getCordsData(locData); 
        $('#twitterSearch').append('<li id="tweet' + id + '" class="mainP tweet"><img class="tweetImage" src="'+ tweet.profile_image_url +'" height="20" width="20" /> <a class="tweetLink" href="http://twitter.com/' + tweet.from_user + '" target="_blank">' + tweet.from_user + '</a> on the ' + newDate + ' <br /> tweeted<span id="tweetTextColor">: ' + tweet.text + '</span></li>'); 
      }); 
     //alert("Ajax text"); 
     setTimeout(twitterSearch, 10000); 
     } 
     }); // End of ajax 
    } // End of function 

    function getCordsData(data){ 
     if(data == null){ 
      data = "No location data found!"; 
      alert(data); 
     }else{ 
      var long = data['coordinates'][0]; 
      var lat = data['coordinates'][1]; 
      alert("long:" + long + "Lat:" + lat); 
     } 
    }