安卓-天气预报系统
一、實驗目的
練習掌握 Android 軟件開發基本編程技術、Android 系統 網絡API的使用、多線程編程
二、實驗內容
開發一個天氣預報系統,具備以下功能:
1、可以羅列全國所有省市縣
2、可以查看全國任意城市天氣信息
3、可以自由切換城市,去查看其它城市的天氣
4、提供手動更新以及后臺自動更新天氣的功能
三、實驗要求
(1)每位同學獨立設計軟件功能、完成軟件的開發與測試。
(2)每位同學獨立完成實驗報告(根據模板),并提交至網絡課堂。
四、數據代碼及運行結果截圖
//WeatherActivity.java 代碼太多了,所以其他文件的代碼就沒有貼上。 public class WeatherActivity extends AppCompatActivity {private ScrollView weatherlayout;private TextView titleCity;private TextView degreeText;private TextView weatherInfoText;private LinearLayout forecastLayout;private LinearLayout suggestionLayput;private TextView pressureText;private TextView feelslikeText;private TextView humidityText;private TextView windscaleText;private TextView winddirText;private ImageView bingPicImg;private TextView sunriseText;private TextView One_content;private TextView One_src;private TextView sunsetText;public SwipeRefreshLayout swipeRefresh;private int mWeatherId;public DrawerLayout drawerLayout;private Button navButton;@SuppressLint("WrongViewCast")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_weather);if(Build.VERSION.SDK_INT >= 21){View decorView = getWindow().getDecorView();decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);getWindow().setStatusBarColor(Color.TRANSPARENT);}weatherlayout=(ScrollView) findViewById(R.id.weather_layout);titleCity=(TextView) findViewById(R.id.title_city);degreeText=(TextView) findViewById(R.id.degree_text);weatherInfoText=(TextView) findViewById(R.id.weather_info_text);forecastLayout=(LinearLayout) findViewById(R.id.forecast_layout);suggestionLayput=(LinearLayout) findViewById(R.id.suggestion_layout) ;winddirText=(TextView) findViewById(R.id.winddir_text);windscaleText=(TextView) findViewById(R.id.windScale_text);pressureText=(TextView) findViewById(R.id.pressure_text);humidityText=(TextView) findViewById(R.id.humidity_text);feelslikeText=(TextView) findViewById(R.id.feelslike_text);sunriseText=(TextView) findViewById(R.id.sunrise_text);sunsetText=(TextView) findViewById(R.id.sunset_text);bingPicImg=(ImageView) findViewById(R.id.bing_pic_img);swipeRefresh = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh);swipeRefresh.setColorSchemeResources(R.color.colorPrimary);drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);navButton = (Button) findViewById(R.id.nav_button);One_content=(TextView) findViewById(R.id.One_content);One_src=(TextView) findViewById(R.id.One_src);SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(this);String weatherString=prefs.getString("weather",null);String weathernowString =prefs.getString("weathernow",null);String weatherliveString =prefs.getString("weatherlive",null);int weatherid=prefs.getInt("cityCode",0);if(weatherString != null&&weatherid!=0&&weathernowString!=null&&weatherliveString!=null){//有緩存時直接解析天氣數據Weather weather = Utility.handleWeatherResponse(weatherString);Now now =Utility.handleWeathernowResponse(weathernowString);Suggestion suggestion=Utility.handleliveindexResponse(weatherliveString);mWeatherId = weatherid;showWeatherInfo1(weather);showWeatherInfo2(now);showWeatherInfo3(suggestion);}else{//無緩存時去服務器查詢天氣mWeatherId = getIntent().getIntExtra("weather_id",1);weatherlayout.setVisibility(View.INVISIBLE);requestWeather(mWeatherId);}swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {@Overridepublic void onRefresh() {requestWeather(mWeatherId);}});//加載圖片String bingPic = prefs.getString("bing_pic", null);if(bingPic != null){Glide.with(this).load(bingPic).into(bingPicImg);}else{loadBingPic();}navButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {drawerLayout.openDrawer(GravityCompat.START);}});loadOnecontent();} //https://devapi.heweather.net/v7/weather/now?key=4651f31cceb1442fb128631c437a7eb6&location=101210401public void requestWeather(final int weatherId) {mWeatherId=weatherId;final SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(WeatherActivity.this).edit();;String weatherUrl = "https://devapi.heweather.net/v7/weather/3d?key=4651f31cceb1442fb128631c437a7eb6&location="+weatherId;String weatherNowUrl = "https://devapi.heweather.net/v7/weather/now?key=4651f31cceb1442fb128631c437a7eb6&location="+weatherId;String weatherliveUrl = "https://devapi.qweather.com/v7/indices/1d?key=4651f31cceb1442fb128631c437a7eb6&type=1,2,3,9,16&location="+weatherId;HttpUtil.sendOkHttpRequest(weatherUrl, new Callback() {@Overridepublic void onResponse(Call call, Response response) throws IOException {final String responseText = response.body().string();final Weather weather = Utility.handleWeatherResponse(responseText);runOnUiThread(new Runnable() {@Overridepublic void run() {if (weather != null ) {editor.putString("weather", responseText);editor.putInt("cityCode",weatherId);editor.apply();showWeatherInfo1(weather);} else {Toast.makeText(WeatherActivity.this, "獲取天氣信息失敗1", Toast.LENGTH_SHORT).show();}swipeRefresh.setRefreshing(false);}});}@Overridepublic void onFailure(Call call, IOException e) {e.printStackTrace();runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(WeatherActivity.this, "獲取天氣信息失敗", Toast.LENGTH_SHORT).show();swipeRefresh.setRefreshing(false);}});}});HttpUtil.sendOkHttpRequest(weatherNowUrl, new Callback() {@Overridepublic void onResponse(Call call, Response response) throws IOException {final String responseText = response.body().string();final Now now = Utility.handleWeathernowResponse(responseText);runOnUiThread(new Runnable() {@Overridepublic void run() {if (now != null ) {editor.putString("weathernow", responseText);editor.apply();showWeatherInfo2(now);} else {Toast.makeText(WeatherActivity.this, "獲取天氣信息失敗2", Toast.LENGTH_SHORT).show();}swipeRefresh.setRefreshing(false);}});}@Overridepublic void onFailure(Call call, IOException e) {e.printStackTrace();runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(WeatherActivity.this, "獲取天氣信息失敗", Toast.LENGTH_SHORT).show();swipeRefresh.setRefreshing(false);}});}});HttpUtil.sendOkHttpRequest(weatherliveUrl, new Callback() {@Overridepublic void onResponse(Call call, Response response) throws IOException {final String responseText = response.body().string();final Suggestion suggestion = Utility.handleliveindexResponse(responseText);runOnUiThread(new Runnable() {@Overridepublic void run() {if (suggestion != null ) {editor.putString("weatherlive", responseText);editor.apply();showWeatherInfo3(suggestion);} else {Toast.makeText(WeatherActivity.this, "獲取天氣信息失敗3", Toast.LENGTH_SHORT).show();}swipeRefresh.setRefreshing(false);}});}@Overridepublic void onFailure(Call call, IOException e) {e.printStackTrace();runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(WeatherActivity.this, "獲取天氣信息失敗", Toast.LENGTH_SHORT).show();swipeRefresh.setRefreshing(false);}});}});loadBingPic();}private void loadBingPic() {String requestBingPic = "http://guolin.tech/api/bing_pic";HttpUtil.sendOkHttpRequest(requestBingPic, new Callback() {@Overridepublic void onFailure(Call call, IOException e) {e.printStackTrace();}@Overridepublic void onResponse( Call call, Response response) throws IOException {final String bingPic = response.body().string();SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(WeatherActivity.this).edit();editor.putString("bing_pic", bingPic);editor.apply();runOnUiThread(new Runnable() {@Overridepublic void run() {Glide.with(WeatherActivity.this).load(bingPic).into(bingPicImg);}});}});}private void loadOnecontent(){String apiUrl = "https://api.ghser.com/qinghua?type=json";try {URL url = new URL(apiUrl);String response=OneContentRequest(url);parseResponse(response);}catch (Exception e){Log.v("@@",Log.getStackTraceString(e));e.printStackTrace();}SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this);String content=prefs.getString("One","每日一句獲取失敗");Typeface typeface = ResourcesCompat.getFont(this, R.font.zt1);One_content.setTypeface(typeface);One_content.setText(content);One_src.setText("----"+"Xaddwell");}public String OneContentRequest(URL url) throws IOException {//用于獲取網站的Json數據StringBuilder response = new StringBuilder();HttpURLConnection httpconn = (HttpURLConnection) url.openConnection();httpconn.setReadTimeout(10000);httpconn.setConnectTimeout(15000);httpconn.setRequestMethod("GET");httpconn.setDoInput(true);httpconn.connect();if (httpconn.getResponseCode()==200){//HttpURLConnection.HTTP_OKBufferedReader input = new BufferedReader(new InputStreamReader(httpconn.getInputStream()),8192);String strLine = null;while ((strLine = input.readLine()) != null){response.append(strLine);}input.close();}return response.toString();}public void parseResponse(String resp){//用于解析Json數據JSONObject root = null;try {root = new JSONObject(resp);String data=root.getString("ishan");SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(WeatherActivity.this).edit();editor.putString("One",data);editor.apply();} catch (JSONException e) {e.printStackTrace();}}private void showWeatherInfo1(Weather weather) {List<County> countyList= DataSupport.where("countyId = ?", String.valueOf(mWeatherId)).find(County.class);String countyName = countyList.get(0).getCountyName();titleCity.setText(countyName);forecastLayout.removeAllViews();for (Forecast forecast : weather.forecastList) {View view = LayoutInflater.from(this).inflate(R.layout.forecast_item, forecastLayout, false);TextView dateText = (TextView) view.findViewById(R.id.date_text);TextView infoText = (TextView) view.findViewById(R.id.info_text);TextView tempText = (TextView) view.findViewById(R.id.temp_text);dateText.setText(forecast.date);if(forecast.textDay.equals(forecast.textNight))infoText.setText(forecast.textDay);elseinfoText.setText(forecast.textDay+"轉"+forecast.textNight);tempText.setText(forecast.tempMax+"/"+forecast.tempMin);forecastLayout.addView(view);}sunsetText.setText("日出"+weather.forecastList.get(0).sunset);sunriseText.setText("日落"+weather.forecastList.get(0).sunrise);weatherlayout.setVisibility(View.VISIBLE);Intent intent=new Intent(this, AutoUpdateService.class);startService(intent);}private void showWeatherInfo2(Now now) {String degree = now.temperature + "℃";String weatherInfo = now.text;degreeText.setText(degree);weatherInfoText.setText(weatherInfo);winddirText.setText(now.windDir);windscaleText.setText(now.windScale+"級");humidityText.setText(now.humidity+"%");pressureText.setText(now.pressure);feelslikeText.setText(now.feelsLike+"℃");weatherlayout.setVisibility(View.VISIBLE);Intent intent=new Intent(this, AutoUpdateService.class);startService(intent);}private void showWeatherInfo3(Suggestion suggestion) {suggestionLayput.removeAllViews();for (SuggestItem suggestItem: suggestion.suggestItemList) {View view = LayoutInflater.from(this).inflate(R.layout.suggestion_item, suggestionLayput, false);TextView nameText = (TextView) view.findViewById(R.id.name_text);TextView levelText = (TextView) view.findViewById(R.id.level_text);TextView categoryText = (TextView) view.findViewById(R.id.category_text);TextView itemText = (TextView) view.findViewById(R.id.item_text);nameText.setText(suggestItem.name+":");levelText.setText(suggestItem.level+":");categoryText.setText(suggestItem.category);itemText.setText(suggestItem.text);suggestionLayput.addView(view);}Intent intent=new Intent(this, AutoUpdateService.class);startService(intent);} }運行截圖如下
每日一句設計:
UI設計 everyday.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/One_content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginTop="40dp"android:layout_marginRight="20dp"android:layout_marginLeft="20dp"android:textColor="#33ccff"android:textSize="70px"android:text="One_content" /><TextViewandroid:id="@+id/One_src"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="right"android:layout_marginTop="10dp"android:layout_marginRight="40dp"android:textColor="#fff"android:textSize="50px"android:text="One_src" /> </LinearLayout>根據API獲取每日一句內容
流程:根據API獲取內容 內容的JSON解析 內容提取的展示
需要注意的點:android.os.networkonmainthreadexception
The exception that is thrown when an application attempts to perform a networking operation on its main thread.This is only thrown for applications targeting the Honeycomb SDK or higher. Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it’s heavily discouraged. See the document Designing for Responsiveness.
即主線程中申請網絡資源可能會造成阻塞
解決方法:
第一種方法:
在MainActivity.java中的setContentView后面添加
if (android.os.Build.VERSION.SDK_INT > 9) {StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy); }第二種方法:
將請求網絡資源的代碼使用Thread去操作。在Runnable中做HTTP請求,不用阻塞UI線程。
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(R.layout.main_view);new Thread(runnable).start(); } Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);Bundle data = msg.getData();String val = data.getString("value");Log.i(TAG,"請求結果:" + val);} } Runnable runnable = new Runnable(){@Overridepublic void run() {// TODO: http request.Message msg = new Message();Bundle data = new Bundle();data.putString("value","請求結果");msg.setData(data);handler.sendMessage(msg);} }new Thread(new Runnable(){@Overridepublic void run() {cachedImage = asyncImageLoader.loadDrawable(imageUrl, position);imageView.setImageDrawable(cachedImage);}}).start();五、錯誤總結
javax.net.ssl.SSLHandshakeException: Chain validation failed 異常解決
解決方法一:
解決方法很簡單,檢查一下設備系統時間是否在證書有效期內,若沒有就改到有效期即可(一般系統時間調整為跟網絡一致)。
解決方法二:跳過https驗證機制
問題解決了,只要將手機系統時間改為當前時間即可了。如果沒有其他特殊需求,看到這里就可以結束了。既然是Https的SSL驗證,那么通過okhttp跳過這個驗證不就好了,在網上查了一下,發現了跳過驗證的寫法:在構建Okhttps時,自定義SSL驗證流程,信任一切證書:
//自定義SS驗證相關類
使用
okBuilder.sslSocketFactory(createSSLSocketFactory());okBuilder.hostnameVerifier(new TrustAllHostnameVerifier()); return okBuilder.build();
六、個人心得體會
下面列舉了100多個國內常用API接口,并按照 筆記、出行、詞典、電商、地圖、電影、即時通訊、開發者網站、快遞查詢、旅游、社交、視頻、天氣、團隊協作、圖片與圖像處理、外賣、消息推送、音樂、云、語義識別、語音識別、雜志、綜合 進行了如下分類。
筆記
? OneNote - OneNote支持獲取,復制,創建,更新,導入與導出筆記,支持為筆記添加多媒體內容,管理權限等。提供SDK和Demo。
? 為知筆記 - 為知筆記Windows客戶端開放了大量的API,其中絕大部分,都通過COM提供,可以在javascript, C#, C++, Delphi等語言中使用。接口通過IDL(Interface description language)語言描述。
? 印象筆記 - 印象筆記提供了ActionScript 3, Android, C++, Windows, iOS, Java, JavaScript, OS X, Perl, PHP, Python, Ruby等平臺的SDK和完整的API參考文檔,可通過API進行認證,筆記,筆記本,附件,搜索,同步等操作,同時提供企業版和本地API。
? 有道云筆記 - 有道云筆記提供了Android SDK,同時Open API允許進行授權,用戶,筆記本,筆記,分享,附件等方面的操作。
出行
? 滴滴 - 滴滴提供了iOS和Android SDK, 可實現拉起滴滴叫車等方面的操作。
? 神州專車 - 神州專車提供了API模式和H5模式兩種接入模式,允許進行基礎信息,訂單,支付,充值,用戶,發票,代金券,企業等方面的操作。
? Uber - Uber提供了Android和iOS的SDK,允許進行乘客,行程體驗,司機,派送次數等四大方面的操作。
詞典
? 百度翻譯 - 百度翻譯支持多種語言互相翻譯,包含PHP, JS, Python, C, Java版Demo。
? 必應詞典 - 微軟翻譯API支持文字和語音兩種類型,支持多種語言互相翻譯,提供C#版本Demo。
? 必應詞典(非官方) - 支持單詞和語句翻譯。 #非官方
? 金山詞霸 - 金山詞霸支持簡單的翻譯操作。
? 金山詞霸(非官方) - 金山詞霸允許進行簡單的翻譯操作。 #非官方
? 扇貝 - 扇貝提供了完整的API,允許進行用戶,查詢,添加學習記錄,忘記單詞,例句,筆記等方面的操作。
? 譯云翻譯 - 譯云支持進行中英互譯,后續會支持更多的語言。
? 有道詞典 - 有道詞典允許進行簡單的翻譯操作。
? 有道詞典(非官方) - 允許進行簡單的翻譯操作。 #非官方
電商
? 當當 - 當當允許商家用戶和網站接入授權,可進行商品,訂單,圖片,問答,店鋪和促銷等方面的操作。
? 京東 - 京東提供了Java, PHP, .net的SDK,授權后可進行多種操作。
? 蘇寧開放服務 - 蘇寧提供了Java, PHP, .Net, Python版本的SDK,授權后可進行多種操作。
? 淘寶開放平臺 - 淘寶提供了Java, .Net, PHP, Python版本的SDK,授權后提供多種操作。
? 亞馬遜 - 亞馬遜提供多種語言版本的SDK,授權后允許多種操作。
地圖
? 百度地圖 - 百度地圖提供了Android, iOS版本的SDK和JavaScript API,可進行定位、地圖、數據、出行、鷹眼軌跡和分析服務。
? 高德地圖 - 高德地圖提供了JavaScript和web服務API,Android和iOS SDK,支持地圖,定位,搜索,路線規劃,導航和室內地圖等。
? 騰訊地圖 - 騰訊地圖提供了JavaScript API,Android和iOS SDK,支持定位,地圖,地點搜索,路線和導航等。
? 天地圖 - 天地圖提供了H5 API和JavaScript API等web API,同時提供了Android和iOS SDK,支持基礎地圖服務,圖層管理,地圖覆蓋物,地圖工具,地名搜索和出行規劃服務。
? 圖吧地圖 - 圖吧提供了JavaScript和Flash API,Android和iOS SDK,支持定位,地址解析,位置標注,位置截圖,路線規劃,周邊查詢,興趣點搜索和在線導航。
電影
? 豆瓣電影 - 豆瓣電影支持電影條目,影人條目,搜索和榜單等。
? 豆瓣電影(非官方) - 獲取最近熱映電影、短評、影評、圖片等。 #非官方
? 貓眼電影(非官方) - 支持查詢首頁電影列表,電影詳情(含評論),本地影院和影院詳情,選座。 #非官方
? Time時光(非官方) - 支持獲取時光網網站數據。 #非官方
? V電影(非官方) - 支持獲取V電影網站的數據。 #非官方
即時通訊
? 環信 - 支持Android, iOS, WebIM, Linux, REST集成,支持多種消息類型。
? 融云 - 支持Android, iOS, Web, 游戲集成,支持多種消息類型。
? 網易云信 - 支持IM實時通訊,實時音視頻,教學白班,專線電話,短信,聊天室,提供iOS, Android, Windows和Web SDK。
? 騰訊云通信IM - 提供iOS, Android, Windows和Web SDK,支持多種消息類型。
開發者網站
? Coding - 授權后可訪問coding.net網站的內容。
? 干貨集中營 - 提供妹子圖和Android, iOS, 前端,拓展資源等內容。
? diycode - 授權后可訪問diycode網站的內容。
? 開源中國 - 授權后可訪問開源中國網站的內容。
? Laravel China - 授權后可訪問 Laravel China 網站的內容。
? Ruby China - 授權后可訪問Ruby China網站的內容。
? V2EX - 可訪問V2EX網站的內容。
快遞查詢
? Trackingmore - Trackingmore目前支持500多家國內外快遞商,免費版有使用次數限制。
? 快遞100 - 快遞100支持1000+家國內國際快遞,免費版有使用次數限制。
? 快遞100(非官方) - 快遞100支持300家國內國際快遞。 #非官方
? 快遞鳥 -專業的第三方物流接口服務商,為開發者聚合全球600+物流接口一次性對接服務,免費版有使用限制。
旅游
? 12306(非官方) - 支持獲取12306火車票票數、票價查詢。 #非官方
? 去哪兒 - 支持獲取去哪兒網的內容。
? 途牛 - 支持途牛網的內容,僅開放給供應商系統。
? 途牛火車票(非官方) - 支持獲取途牛火車票票數、票價查詢。 #非官方
? 攜程 - 支持攜程網的內容。
? 藝龍 - 支持獲取產品數據,完成用戶的預訂,進行訂單查詢、更改或取消。提供在線工具,以及H5, Java, C#, PHP, Ruby版本的Demo。
社交
? 釘釘 - 支持免登,企業通訊錄,服務窗,釘盤,地圖,會話,DING,電話,音頻,掃碼,支付,分享等服務,提供SDK和Demo,PC版UI規范,調試工具和釘釘UI組件庫。
? 豆瓣 - 支持圖書,電影,音樂,同城,廣播,用戶,日記,相冊,線上活動,論壇,回復和我去等功能,提供豆瓣組件,豆瓣標示和Demo。
? 開心網 - 支持用戶信息,登錄授權,好友,傳播應用,支付,分享內容,消息,交互,開心網應用等內容,提供SDK,開源插件和標示素材。
? QQ互聯 - 支持用戶資料,QQ會員信息,空間相冊,騰訊微博資料,分享到騰訊微博,微博好友信息,財付通信息等內容,提供SDK, Demo, 以及設計資源。
? 微博 - 支持粉絲服務,微博,評論,用戶,關系,賬號,收藏,搜索,提醒,短鏈,公共服務,位置服務,地理信息,地圖引擎,支付以及OAuth2.0授權等內容,提供微博標示及SDK。
? 微信 - 支持移動應用,網站應用,公眾賬號,公眾號第三方平臺等內容,提供SDK, Demo, 以及設計資源。
視頻
? 愛奇藝 - 支持彈幕,全色彩播放器,高清碼流,視頻托管,播放愛奇藝視頻,應用分發,IOCP等內容。
? Bilibili(非官方) - 支持登錄,我的信息,番劇專題,視頻/專題收藏、關注,番劇,彈幕等。 #非官方
? Bilibili(非官方) - 支持獲取Bilibili網站數據。#非官方
? 樂視 - 支持標準直播,標準點播,視頻發行平臺,移動直播等內容,提供SDK下載。
? 內涵段子(非官方) - 支持獲取內涵段子中大部分模塊信息。 #非官方
? 搜狐視頻 - 支持一二級內容獲取,內容分類獲取,視頻詳情信息,專輯詳情信息,分級列表獲取,關鍵詞搜索等內容。
? 土豆 - 支持視頻模塊,豆單模塊,影視庫模塊,用戶模塊,轉帖模塊,字段定義模塊等內容。
? 優酷 - 支持內容輸出,視頻搜索,智能推薦,用戶登錄,用戶互動,用戶信息,視頻上傳至優酷,視頻互動等內容,提供SDK。
天氣
? 彩云天氣 - 支持全球天氣數據,兩種空氣質量數據,天氣預報,實況天氣,獨家降水預報,獨家空氣質量預報,六種天氣數據,四種生活指數數據等內容,部分功能收費。
? 和風天氣 - 支持7-10天預報,實況天氣,每小時預報,生活指數,災害預警,景點天氣,歷史天氣,城市查詢等內容,僅國內數據免費。
? 魅族天氣(非官方) - 支持獲取魅族天氣。 #非官方
? 小米天氣(非官方) - 支持獲取小米天氣數據。 #非官方
? 心知天氣 - 支持天氣實況,逐日預報和歷史,24小時逐小時預報,過去24小時天氣歷史記錄,氣象災害預警,空氣質量實況與城市排行,逐日和逐小時空氣質量預報,過去24小時空氣質量歷史記錄,生活指數,農歷、節氣、生肖,機動車尾號限行,日出日落,月初月落和月像,城市搜索等內容,僅國內數據免費。
? 中央天氣預報(非官方) - 支持獲取中央天氣預報數據。 #非官方
團隊協作
? Teambition - 支持詳細的文檔說明,部分平臺提供demo。
圖片與圖像處理
? 別樣網 - 無版權免費大尺寸圖片共享平臺。
? Bing每日壁紙(非官方) - 支持圖片URL和圖片描述,可獲取不同地區的數據。 #非官方
? Camera360 - 支持全幀率直播美白濾鏡,提供SDK和Demo。
? 嗨圖 - 支持圖片標注,僅提供iOS版本SDK。
? 名片全能王 - 支持精準識別幾十種語言的名片,自動切邊并美化名片圖像,自動返回識別結果,提供多種版本SDK,收費。
? pixabay - 在所有的圖像和視頻Pixabay釋放自由版權下創作共用CC0。你可以下載、修改、分發,并使用它們在任何你喜歡的任何東西,即使在商業應用程序中使用它們。不需要歸屬權。
? 企業證件識別 - 支持身份證,駕駛證,護照等,收費。
? 掃描全能王 - 支持圖像智能剪裁,五種圖像增強模式,手動調節圖像細節,自動返回掃描結果等,提供iOS與Android版本SDK,收費。
? 我知圖 - 支持相似圖像搜索,圖像識別匹配,圖像識別關鍵詞推薦,重復圖片探測等內容。
? 銀行卡|信用卡識別 - 提供SDK和API,收費。
外賣
? 百度外賣 - 支持商戶,菜品,商品,訂單和基礎數據等內容,提供SDK和Demo。
? 大眾點評 - 支持商戶,團購,在線預定,商品點評,數據統計,元數據等內容。
? 餓了么 - 支持查詢,預定,訂單,其他訂單,數據推送,支付,評價,活動,賬戶同步,數據落地同步等內容。
? 美團外賣 - 支持門店,配送范圍,菜品,藥品,訂單,訂單推送等內容。
消息推送
? 百度云推送 - 支持iOS, Android和服務器端,支持推送,統計,組管理等Rest API接口。服務器端支持Java, Python, PHP, REST API。提供所支持各語言版本的SDK。
? 華為推送 - 支持Android,提供SDK。
? 極光 - 支持Android, iOS, WindowsPhone, 服務器端REST API, 提供Java, Python, PHP, Ruby, C#, Node.js等版本的SDK。
? LeanCloud - 支持Android, iOS, WindowsPhone和Web網頁推送,使用云引擎和JavaScript創建推送,使用REST API推送消息。提供Objectvie-C(開放源碼), JavaScript(開放源碼), Android, Unity, .Net, WindowsPhone, Java(開放源碼), Python(開放源碼), PHP(開放源碼), C++(開放源碼), Swift(開放源碼)版本SDK。同時提供Demo。
? 騰訊信鴿 - 支持iOS和Android平臺,服務器端采用Rest API, 同時服務器端支持Java, PHP, Python等語言并提供SDK。
? 小米 - 支持Android和iOS平臺,服務器端支持Java, Python并提供SDK。
? 友盟 - 支持Android和iOS平臺,服務器端支持PHP, Java, Python并提供SDK。
音樂
? 百度音樂(非官方) - 支持頻道歌曲列表,專輯的歌曲列表,歌曲的詳細信息,歌手專輯信息,搜索,歌手的所有歌曲,排行榜,所有專輯,所有歌手,歌手的專輯列表,歌手信息,歌詞搜索,歌曲文件詳細信息。 #非官方
? 豆瓣音樂 - 支持音樂信息,評論信息,標簽信息,搜索音樂,某個音樂中標記最多的標簽,發表、修改、刪除評論,用戶對音樂的所有標簽等內容。
? 考拉FM - 支持獲取指定分類下列表和內容,搜索指定關鍵字內容,專輯/電臺/直播詳情,指定專輯下列表,指定電臺播單,分類下專輯TOP50,指定期(碎片)所在專輯最新分頁功能,分類下全部直播計劃,版本升級接口,排行榜,精選,傳統電臺列表/詳情/地區等。
? 酷狗音樂(非官方) - 支持搜索,各種排行榜,歌手專輯信息,下載和獲取播放地址。 #非官方
? 企鵝FM - 支持獲取電臺分類列表,電臺分類下的專輯信息列表,專輯下節目信息列表,電臺節目播放鏈接,搜索關鍵字相關主播/專輯/節目,主播名下專輯,特定時間段內新增主播/更新的專輯/新增的專輯等。
? QQ音樂(非官方) - 支持歌曲榜單,歌曲/歌詞地址,歌曲圖片。 #非官方
? 蜻蜓FM - 支持OAuth2.0授權,音頻數據中心,分類,點播,直播,臨時直播,排行榜,搜索,內容更新狀態,主播,此刻,專題,活動等內容。
? 網易云音樂(非官方) - 支持獲取用戶歌單,歌單詳情,歌曲URL。 #非官方
? 喜馬拉雅FM - 支持Android和iOS平臺,并提供相應的SDK和Demo,具體支持內容請下載相關文件查看。
云
? 阿里云 - 支持彈性計算,數據庫,存儲與CDN,網絡,應用服務,域名與網站等類別的內容,并提供了相關SDK。
? 百度云 - 支持計算和網絡,存儲和CDN,數據庫,安全和管理,數據分析,智能多媒體服務,物聯網服務,人工智能,應用服務,網站服務,數字營銷服務等內容,并提供相關的SDK。
? Bmob - 支持云數據庫,容器服務,消息推送,文件存儲,短信驗證碼,及時通訊,云端邏輯,定時任務,地理位置等。
? LeanCloud - 支持云存儲,數據分析,用戶關系,實時通訊,消息推送,移動統計等。
? 七牛云 - 支持對象存儲,融合CDN,直播云,數據處理等。
? 騰訊云 - 支持計算,網絡,存儲與CDN,數據庫,安全服務,監控與管理,域名服務,視頻服務,大數據與AI等內容,提供相關SDK。
? 野狗 - 支持實時數據同步,實時視頻通話,及時通訊,短信,身份認證等。
語義識別
? BosonNLP玻森 - 支持REST API并提供Python SDK。
? 騰訊文智 - 支持詞法類,句法類,篇章類,下載類API,目前平臺能識別類別囊括了求職招聘、影視、音樂、健康養生、財經、廣告推廣、犯罪、政治等90多個類別,且算法支持快速迭代更新已有類別及增加新類別。提供Python SDK。
語音識別
? 百度語音 - 支持全平臺REST API, 離線在線融合模式,深度語義解析,場景識別定制,自定義上傳語料、訓練模型,基礎服務永久免費。提供相應SDK和Demo應用。
? 搜狗語音云開放平臺 - 支持在線/離線語音識別,在線聽歌識曲,離線語音合成等內容。提供相應平臺SDK。
? 訊飛開放平臺 - 支持語音聽寫/轉寫,在線/離線命令詞識別,語音喚醒等內容,平臺支持廣泛,提供相應SDK。
雜志
? 豆瓣一刻(非官方) - 支持獲取指定日期文章列表,欄目總覽,推薦作者,作者信息,作者更多文章信息,欄目文章列表及翻頁,文章評論及熱門評論列表。 #非官方
? 開眼(非官方) - 支持獲取未登錄狀態下開眼精選、發現、關注信息。 #非官方
? One一個(非官方) - 支持獲取首頁圖片,文章,音樂及電影。 #非官方
? 圖蟲(非官方) - 支持獲取圖蟲 app 所有信息。 #非官方
? 一席(非官方) - 支持獲取一席主頁、演講、講者、枝椏等內容 #非官方
? 知乎日報(非官方) - 支持獲取界面啟動圖像,軟件版本查詢,最新消息,消息內容獲取與離線下載,過往消息,新聞額外消息,新聞對應長/短評論查看,主題日報列表,主題日報內容,熱門消息,欄目總覽,欄目具體消息,新聞的推薦者,某個專欄之前的新聞,Editor的主頁等。 #非官方
? 知乎專欄(非官方) - 支持獲取指定專欄的信息,指定專欄的文章列表,指定的文章內容,評論列表,點贊信息。 #非官方
綜合
? 阿凡達數據 - 支持金融股票,充值認證,便民類,新聞文章,醫藥交通,科教文藝,創意數據,及時通訊等內容。
? 阿里大于 - 支持驗證碼,短信通知,語音通知,流量錢包充值,私密專線,群發助手等內容。
? APiX - 支持基礎征信數據,信用分析服務,支付繳費接口等數據,部分免費。
? 百度API STORE - 支持多種類型數據,提供SDK。
? HaoService - 支持多種類型數據。
? 聚合數據 - 支持多種類型數據,部分免費。
? 通聯數據 - 提供金融類數據,支持免費試用。
代碼見我發布的資源
總結
- 上一篇: Eclipse语言包在官网下载不了-解决
- 下一篇: 问卷星全自动填写脚本浅尝