使用 Twitter API 从推文中获取坐标
Get coordinates from a Tweet using the Twitter API
我正在尝试使用 Twitter API 和 Java 从推文中正确获取信息。我正在尝试从启用了地理标记的 this tweet 获取精确坐标。
从现在开始,我已经按照 documentation 的指示创建了相应的 Java classes,但也许我不太了解 Geo Objects,因为coordinates
、bounding_box
或 place
出现。我的猜测是我没有正确声明那些 classes.
推文 class:
// Imports here
public class Tweet {
@SerializedName("created_at")
public String created_at;
@SerializedName("id")
public long id;
// ... All the rest of the parameters
@SerializedName("coordinates")
public Coordinates coordinates;
@SerializedName("place")
public transient Place place;
对于坐标class:
// Imports here
public class Coordinates {
@SerializedName("coordinates")
public String coordinates;
@SerializedName("type")
public String type;
}
地点 class:
// Imports here
public class Place {
@SerializedName("id")
public String id;
@SerializedName("url")
public String url;
// ... All the rest of the parameters
@SerializedName("bounding_box")
public String bounding_box;
}
当我请求从链接的推文中获取 json 信息时,我得到了以下数据,如您所见,字段 coordinates
或 places
没有出现.如果它有用,我正在使用 MongoDB Java API 来存储 json 文件及其 Java POJO 管理器。您可以在此处找到所有代码:https://github.com/marmatsan/theTrainEngine
{
"_id" : NumberLong("1212893878430420992"),
"created_at" : "Fri Jan 03 00:30:09 +0000 2020",
"favorite_count" : 0,
"favorited" : false,
"id_str" : "1212893878430420992",
"is_quote_status" : false,
"lang" : "en",
"possibly_sensitive" : false,
"quoted_status_id" : NumberLong(0),
"quoted_status_id_str" : NumberLong(0),
"reply_count" : 0,
"retweet_count" : 0,
"retweeted" : false,
"source" : "<a href=\"http://twitter.com/download/android\" rel=\"nofollow\">Twitter for Android</a>",
"text" : "Test 1",
"truncated" : "false",
"user" : {
"_id" : NumberLong(593955589),
"created_at" : "Tue May 29 18:59:38 +0000 2012",
"default_profile" : false,
"default_profile_image" : false,
"description" : "En búsqueda del verdadero camino del Tao estudiando Ingeniería en Tecnologías de Telecomunicación.",
"favourites_count" : 7497,
"followers_count" : 186,
"friends_count" : 114,
"id_str" : "593955589",
"listed_count" : 5,
"location" : "Salamanca/Toledo/Madrid",
"name" : "Martín ",
"profile_banner_url" : "https://pbs.twimg.com/profile_banners/593955589/1513111580",
"profile_image_url_https" : "https://pbs.twimg.com/profile_images/1130587021678927874/50unsAd3_normal.png",
"protected_att" : false,
"screen_name" : "MMateos97",
"statuses_count" : 19420,
"url" : "https://github.com/marmatsan",
"verified" : false
}
}
编辑: 正如答案中所述,问题出在实现上,因为当我从 Place
对象中删除 transient
修饰符时程序不工作。如果有人解决了这个问题,请在评论中留下。
当我请求状态时,它具有该状态的正确字段。
$ okurl https://api.twitter.com/1.1/statuses/show/1212893878430420992.json
...
"geo":null,
"coordinates":null,
"place":{"id":"fd110fb449209bc4","url":"https:\/\/api.twitter.com\/1.1\/geo\/id\/fd110fb449209bc4.json","place_type":"city","name":"Burguillos de Toledo"
https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/geo-objects#tweet-exact
阅读 "Tweet with Twitter Place" 和 "Tweet with exact location" 之间的区别。
我怀疑您的 "transient" 字段导致 Mongo 不保存此字段。
我正在尝试使用 Twitter API 和 Java 从推文中正确获取信息。我正在尝试从启用了地理标记的 this tweet 获取精确坐标。
从现在开始,我已经按照 documentation 的指示创建了相应的 Java classes,但也许我不太了解 Geo Objects,因为coordinates
、bounding_box
或 place
出现。我的猜测是我没有正确声明那些 classes.
推文 class:
// Imports here
public class Tweet {
@SerializedName("created_at")
public String created_at;
@SerializedName("id")
public long id;
// ... All the rest of the parameters
@SerializedName("coordinates")
public Coordinates coordinates;
@SerializedName("place")
public transient Place place;
对于坐标class:
// Imports here
public class Coordinates {
@SerializedName("coordinates")
public String coordinates;
@SerializedName("type")
public String type;
}
地点 class:
// Imports here
public class Place {
@SerializedName("id")
public String id;
@SerializedName("url")
public String url;
// ... All the rest of the parameters
@SerializedName("bounding_box")
public String bounding_box;
}
当我请求从链接的推文中获取 json 信息时,我得到了以下数据,如您所见,字段 coordinates
或 places
没有出现.如果它有用,我正在使用 MongoDB Java API 来存储 json 文件及其 Java POJO 管理器。您可以在此处找到所有代码:https://github.com/marmatsan/theTrainEngine
{
"_id" : NumberLong("1212893878430420992"),
"created_at" : "Fri Jan 03 00:30:09 +0000 2020",
"favorite_count" : 0,
"favorited" : false,
"id_str" : "1212893878430420992",
"is_quote_status" : false,
"lang" : "en",
"possibly_sensitive" : false,
"quoted_status_id" : NumberLong(0),
"quoted_status_id_str" : NumberLong(0),
"reply_count" : 0,
"retweet_count" : 0,
"retweeted" : false,
"source" : "<a href=\"http://twitter.com/download/android\" rel=\"nofollow\">Twitter for Android</a>",
"text" : "Test 1",
"truncated" : "false",
"user" : {
"_id" : NumberLong(593955589),
"created_at" : "Tue May 29 18:59:38 +0000 2012",
"default_profile" : false,
"default_profile_image" : false,
"description" : "En búsqueda del verdadero camino del Tao estudiando Ingeniería en Tecnologías de Telecomunicación.",
"favourites_count" : 7497,
"followers_count" : 186,
"friends_count" : 114,
"id_str" : "593955589",
"listed_count" : 5,
"location" : "Salamanca/Toledo/Madrid",
"name" : "Martín ",
"profile_banner_url" : "https://pbs.twimg.com/profile_banners/593955589/1513111580",
"profile_image_url_https" : "https://pbs.twimg.com/profile_images/1130587021678927874/50unsAd3_normal.png",
"protected_att" : false,
"screen_name" : "MMateos97",
"statuses_count" : 19420,
"url" : "https://github.com/marmatsan",
"verified" : false
}
}
编辑: 正如答案中所述,问题出在实现上,因为当我从 Place
对象中删除 transient
修饰符时程序不工作。如果有人解决了这个问题,请在评论中留下。
当我请求状态时,它具有该状态的正确字段。
$ okurl https://api.twitter.com/1.1/statuses/show/1212893878430420992.json
...
"geo":null,
"coordinates":null,
"place":{"id":"fd110fb449209bc4","url":"https:\/\/api.twitter.com\/1.1\/geo\/id\/fd110fb449209bc4.json","place_type":"city","name":"Burguillos de Toledo"
https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/geo-objects#tweet-exact
阅读 "Tweet with Twitter Place" 和 "Tweet with exact location" 之间的区别。
我怀疑您的 "transient" 字段导致 Mongo 不保存此字段。