// Copyright 2009 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package org.npr.api; import android.net.Uri; import android.util.Log; import java.util.Map; import java.util.Map.Entry; public class ApiConstants { private static final String LOG_TAG = ApiConstants.class.getName(); // Main URL public static final String URL = "https://api.npr.org"; // Various endpoints of the api public static final String STATIONS_PATH = "stations"; public static final String STORY_PATH = "query"; public static final String LIST_PATH = "list"; // Station api params public static final String PARAM_LAT = "lat"; public static final String PARAM_LON = "lon"; public static final String PARAM_ZIP = "zip"; public static final String PARAM_CALL_LETTERS = "callLetters"; public static final String PARAM_CITY = "city"; public static final String PARAM_STATE = "state"; // General params public static final String PARAM_ID = "id"; public static final String PARAM_API_KEY = "apiKey"; public static final String PARAM_SC = "sc"; public static final String PARAM_SC_VALUE = "18"; public static final String PARAM_FIELDS = "fields"; public static final String PARAM_SORT = "sort"; public static final String PARAM_DATE = "date"; public static final String PARAM_REQUIRED_ASSETS = "requiredAssets"; public static final String PARAM_RANDOMIZE_STATIONS = "randomize"; public static final String STORY_FIELDS = "titles,teasers,storyDate,byline,audio,textWithHtml,image,organization,parent,layout"; private final String apiKey; private static ApiConstants instance; public String createUrl(String path, Map<String, String> params) { String uri = String.format("%s/%s?", URL, path); params.put(PARAM_API_KEY, this.apiKey); params.put(PARAM_SC, PARAM_SC_VALUE); return addParams(uri, params); } public String addParams(String url, Map<String, String> params) { StringBuilder uri = new StringBuilder(url); for (Entry<String, String> param : params.entrySet()) { uri.append("&").append(Uri.encode(param.getKey())).append("=").append( Uri.encode(param.getValue())); } Log.d(LOG_TAG, uri.toString()); return uri.toString(); } private ApiConstants(String apiKey) { // Force construction through static methods this.apiKey = apiKey; } public static void createInstance(String apiKey) { if (instance == null) { instance = new ApiConstants(apiKey); } } public static ApiConstants instance() { return instance; } public boolean apiKeyIsValid() { return apiKey != null && apiKey.length() > 0; } }