我如何获得在 Twitter 上发布的四方签到的位置(纬度、经度)?
Posted
技术标签:
【中文标题】我如何获得在 Twitter 上发布的四方签到的位置(纬度、经度)?【英文标题】:How can I get the position (lat, lon) of a foursquare checkin posted on twitter? 【发布时间】:2012-01-08 20:12:10 【问题描述】:我使用 twitter API 搜索所有带有“4sq.com”的公开推文:
http://search.twitter.com/search.json?q=4sq.com
所以我得到了在 Foursquare 上实际在 Twitter 上共享的所有签到。
"created_at":"Sun, 08 Jan 2012 20:05:27 +0000","from_user":"fenavergara","from_user_id":50876086,"from_user_id_str":"50876086","from_user_name":"Fernanda Vergara Ch","geo":null,"id":156104246239051776,"id_str":"156104246239051776","iso_language_code":"lt","metadata":"result_type":"recent","profile_image_url":"http://a2.twimg.com/profile_images/1708744785/image_normal.jpg","profile_image_url_https":"https://si0.twimg.com/profile_images/1708744785/image_normal.jpg","source":"<a href="http://foursquare.com" rel="nofollow">foursquare</a>","text":"I'm at Roca Roja (Antofagasta) http://t.co/DIKdYGwD","to_user":null,"to_user_id":null,"to_user_id_str":null,"to_user_name":null,"created_at":"Sun, 08 Jan 2012 20:05:27 +0000","from_user":"Fabioland76","from_user_id":357326176,"from_user_id_str":"357326176","from_user_name":"Fabio Landini","geo":null,"id":156104246104821760,"id_str":"156104246104821760","iso_language_code":"no","metadata":"result_type":"recent","profile_image_url":"http://a3.twimg.com/profile_images/1506958638/profiloJPG_normal.jpg","profile_image_url_https":"https://si0.twimg.com/profile_images/1506958638/profiloJPG_normal.jpg","source":"<a href="http://foursquare.com" rel="nofollow">foursquare</a>","text":"I'm at Burger King (Gallerie Cantoni, Legnano) http://t.co/rU1jIJ4A","to_user":null,"to_user_id":null,"to_user_id_str":null,"to_user_name":null
通过这些推文,Foursquare 提供了一个链接(例如:http://t.co/DIKdYGwD),我可以在其中查看地图上签到的位置(如果我在网页上显示该链接)。
如何以编程方式直接从推文列表中获取纬度和经度?
想法:是否需要抓取网页上的链接并分析得到经纬度?
编辑:我不想使用 Twitter 地理编码
【问题讨论】:
【参考方案1】:如果您想使用foursquare API,这里实际上有一个更好的解决方案。一种不依赖于启用 Twitter 地理标记的用户。
您已经注意到状态更新中的链接重定向到一个方形页面。您可能会注意到 url 中有两个关键信息,而不是屏幕抓取。签入 ID,以及一个名为 s(用于签名)的参数,可让您通过 Foursquare 的 API 访问签入。
https://foursquare.com/dens/checkin/4f0b3676e4b0e8ed3a590e41?s=MWHM3-0BsLXIJprfbALvOM606ZE&ref=tw
例如,在上面的 url 中,checkin id 是 4f0b3676e4b0e8ed3a590e41 而签名是 MWHM3-0BsLXIJprfbALvOM606ZE
使用 /checkins 端点,您可以获得完整的签到详细信息(包括场地的纬度/经度)。 Dox 在这里:https://developer.foursquare.com/docs/checkins/checkins
【讨论】:
【参考方案2】:您已经拥有了所需的内容,请查看您发布的搜索输出示例中的“地理”部分。它是 null 因为它没有被填充(twitter 用户忘记在设置中启用 twitter 位置,并且来自foursquare 的所有位置都被 twitter 忽略)。
您可以按位置过滤推文,请查看Twitter Dev documentation。
UPD:
如果你想在没有存储到twit的情况下获取位置,你必须对foursquare短链接进行请求并解析场地信息(你也可以窃取位置)。查看示例4sq.com页面的来源(小部分):
...
options['lat'] = 42.98758759825106;
options['lng'] = -71.50742411613464;
options['fuzzy'] = false;
options['venue'] = "id":"v4f08df964fc62d44946f058a","venue":"id":"4f08df964fc62d44946f058a","name":"ABC News \u2013 WMUR Debate","contact":"twitter":"MittRomney","location":"address":"100 St Anselm Drive","lat":42.98758759825106,"lng":-71.50742411613464,"city":"Manchester","state":"NH","categories":["id":"4bf58dd8d48988d1af941735","name":"College Auditorium","pluralName":"College Auditoriums","shortName":"Auditorium","icon":"prefix":"https:\/\/foursquare.com\/img\/categories\/education\/default_","sizes":[32,44,64,88,256],"name":".png","primary":true],"verified":false,"stats":"checkinsCount":7,"usersCount":7,"tipCount":1;
...
不幸的是,Foursquare 团队可以更改页面格式或限制来自 IP 地址的请求,而无需任何注释。这就是为什么这个解决方案是丑陋的。
UPD2
请参阅@MikeLewis 的answer,我错过了 Foursquare API 支持通过检查 id 来请求信息。
【讨论】:
我知道..我不想对推文进行地理定位,但 Foursquare 上的签到在 Twitter 上共享。而且 Twitter 地理编码不是通过 Fousquare 签入来填充的。 @user420574 您从 Twitter 服务器请求推特,如果推特不包含经纬度,您只能从 Foursquare 服务器获取此信息。乍一看,您需要从短 URL 获取场地 ID,并使用 Foursquare API 请求场地信息 感谢您的回答。如果我理解得很好:我可以解析网页的源代码以获取经纬度。在这种情况下,我可以避免 4sq 的速率限制。但是 Foursquare 可以更改代码源格式。我说的对吗? @user420574 是的,但我不确定您是否可以使用此方法避免 4sq 的速率限制(它没有记录,并且可能可以由foursquare 团队更改功能)。 这是来自推特的公开请求,所以我可以避免这种情况。感谢您的帮助。以上是关于我如何获得在 Twitter 上发布的四方签到的位置(纬度、经度)?的主要内容,如果未能解决你的问题,请参考以下文章
我如何在 rails 中获得 twitter/friendfeed 之类的主页网址?
如何在不达到 API 限制的情况下获得所有 Twitter 关注者