2012-05-10 2 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 
}, 

То, что я пытаюсь сделать, это ухватить координаты так, чтобы я мог использовать их с Google Maps 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 [я] .geo.coordinates' и когда я пытаюсь 'json.results [я] .geo' отображает [объект Object] –

+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 ngle one? –

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, но он удаляет весь вывод, все еще ничего не получая ни от одного из двух фрагментов. Я ценю вашу помощь, хотя больше идей? Я перестроил HTML, но, как и ожидалось, ничего не сделал для функции –

+0

console.log распечатает текст в консоли браузера. В вашем браузере, если вы нажмете «View -> Deveoper -> JavaScript Console», а затем снова запустите свой код, он должен распечатать текст в консоли. – BananaNeil

2

Я думал, что я хотел бы добавить метод $ .each только в случае, если кто-нибудь пошел по этому пути.

// 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); 
     } 
    } 
Смежные вопросы