无法提取国家/地区的OpenWeather城市

时间:2019-03-14 09:39:13

标签: android ios react-native openweathermap

我想为我的应用程序使用全天候API。为此,我认为我可能可以在自己的应用程序中将城市及其ID保存在json文件中,并且每当我用户想要位置天气时,应用程序都会从​​json中选择城市的ID并进行API调用。

为此,我下载了Openweather提供的30MB Json文件,其中包含所有国家/地区及其所有城市。在我的应用中放置30MB显然不是一个好主意。所以我决定只提取我的乡村城市。但问题是,这个想法无法完成。因此来自不同国家的许多城市都使用相同的名称。然后提取的json又很大了。甚至某些国家(地区)代码都是其他国家/地区的城市。

我想知道是否有更好的实现方法。或仅提取一个国家的城市的任何想法或方法。

在我的应用中为不同城市实施天气预报的任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

我知道这个问题很旧,但是最近我也遇到了这个问题。我最终的方法是将$access_token = 'YOUR ACCESS TOKEN'; $username = 'rudrastyh'; $user_search = rudr_instagram_api_curl_connect("https://api.instagram.com/v1/users/search?q=" . $username . "&access_token=" . $access_token); // $user_search is an array of objects of all found users // we need only the object of the most relevant user - $user_search->data[0] // $user_search->data[0]->id - User ID // $user_search->data[0]->first_name - User First name // $user_search->data[0]->last_name - User Last name // $user_search->data[0]->profile_picture - User Profile Picture URL // $user_search->data[0]->username - Username $user_id = $user_search->data[0]->id; // or use string 'self' to get your own media $return = rudr_instagram_api_curl_connect("https://api.instagram.com/v1/users/" . $user_id . "/media/recent?access_token=" . $access_token); //var_dump( $return ); // if you want to display everything the function returns foreach ($return->data as $post) { echo '<a href="' . $post->images->standard_resolution->url . '"><img src="' . $post->images->thumbnail->url . '" /></a>'; 放入默认的导出JSON对象中,并编写一个节点脚本,然后按国家/地区代码删除城市:

city.list.json

这完全有效!然后我遇到的唯一问题是var fs = require('fs'); var cityList = require('./city.list.js'); let output = {}; let countryCodes = []; cityList.forEach((city) => { const country = city.country; if (country) { if (!countryCodes.includes(country)) { countryCodes.push(country); } if (!output[country]) { output[country] = []; } output[country].push({ id: city.id, name: city.name, }); } }); for (const [key, value] of Object.entries(output)) { const fileName = 'city.' + key.toLowerCase() + '.json'; fs.writeFile(fileName, JSON.stringify(value), function (err) { if (err) console.error(err.message); console.log(fileName + ' - saved!'); }); } fs.writeFile('countrycodes.json', JSON.stringify(countryCodes), function (err) { if (err) console.error(err.message); console.log('countrycodes.json' + ' - saved!'); }); 包含国家/地区名称,并且它们在数据中没有区别...