这是JSON输出
{
"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 。结果[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 :(得分: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);
}
}
答案 1 :(得分: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();
});
也是为了帮助一个工作的小人 http://jsfiddle.net/th3fallen/jc2Kf/
答案 2 :(得分: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标记。我不认为这是你的问题(可能是?),但你应该解决它。