Skip to content

Commit 56fc873

Browse files
tmm6907airTDSB
andauthored
Added a default languages dict const.py to resolve Issue #78 (#89)
Co-authored-by: terrence.moore <terrence.moore@aireon.com>
1 parent 5bc9df0 commit 56fc873

File tree

2 files changed

+77
-21
lines changed

2 files changed

+77
-21
lines changed

newsapi/const.py

Lines changed: 62 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
"""Constants and allowed parameter values specified in the News API."""
2-
32
TOP_HEADLINES_URL = "https://newsapi.org/v2/top-headlines"
43
EVERYTHING_URL = "https://newsapi.org/v2/everything"
54
SOURCES_URL = "https://newsapi.org/v2/sources"
65

76
#: The 2-letter ISO 3166-1 code of the country you want to get headlines for. If not specified,
87
#: the results span all countries.
9-
countries = {
8+
COUNTRIES = {
109
"ae",
1110
"ar",
1211
"at",
@@ -22,7 +21,6 @@
2221
"cz",
2322
"de",
2423
"eg",
25-
"es",
2624
"fr",
2725
"gb",
2826
"gr",
@@ -32,7 +30,6 @@
3230
"ie",
3331
"il",
3432
"in",
35-
"is",
3633
"it",
3734
"jp",
3835
"kr",
@@ -46,7 +43,6 @@
4643
"no",
4744
"nz",
4845
"ph",
49-
"pk",
5046
"pl",
5147
"pt",
5248
"ro",
@@ -64,17 +60,73 @@
6460
"us",
6561
"ve",
6662
"za",
67-
"zh",
63+
}
64+
65+
DEFAULT_LANGUAGES = {
66+
"ae": "ar",
67+
"ar": "es",
68+
"at": "de",
69+
"au": "en",
70+
"be": "nl",
71+
"bg": "bg",
72+
"br": "pt",
73+
"ca": "en",
74+
"ch": "de",
75+
"cn": "zh",
76+
"co": "es",
77+
"cu": "es",
78+
"cz": "cs",
79+
"de": "de",
80+
"eg": "ar",
81+
"fr": "fr",
82+
"gb": "en",
83+
"gr": "el",
84+
"hk": "zh",
85+
"hu": "hu",
86+
"id": "id",
87+
"ie": "en",
88+
"il": "he",
89+
"in": "hi",
90+
"it": "it",
91+
"jp": "ja",
92+
"kr": "ko",
93+
"lt": "lt",
94+
"lv": "lv",
95+
"ma": "ar",
96+
"mx": "es",
97+
"my": "ms",
98+
"ng": "en",
99+
"nl": "nl",
100+
"no": "no",
101+
"nz": "en",
102+
"ph": "en",
103+
"pl": "pl",
104+
"pt": "pt",
105+
"ro": "ro",
106+
"rs": "sr",
107+
"ru": "ru",
108+
"sa": "ar",
109+
"se": "sv",
110+
"sg": "en",
111+
"si": "sl",
112+
"sk": "sk",
113+
"th": "th",
114+
"tr": "tr",
115+
"tw": "zh",
116+
"ua": "uk",
117+
"us": "en",
118+
"ve": "es",
119+
"za": "zu",
68120
}
69121

70122
#: The 2-letter ISO-639-1 code of the language you want to get articles for. If not specified,
71123
#: the results span all languages.
72-
languages = {"ar", "en", "cn", "de", "es", "fr", "he", "it", "nl", "no", "pt", "ru", "sv", "se", "ud", "zh",
73-
"en-US"}
124+
LANGUAGES = {"ar", "de", "en", "es", "fr", "he", "it", "nl", "no", "pt", "ru", "sv", "ud", "zh"}
74125

75126
#: The category you want to get articles for. If not specified,
76127
#: the results span all categories.
77-
categories = {"business", "entertainment", "general", "health", "science", "sports", "technology"}
128+
CATEGORIES = {"business", "entertainment", "general", "health", "science", "sports", "technology"}
78129

79130
#: The order to sort article results in. If not specified, the default is ``"publishedAt"``.
80-
sort_method = {"relevancy", "popularity", "publishedAt"}
131+
SORT_METHOD = {"relevancy", "popularity", "publishedAt"}
132+

newsapi/newsapi_client.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def __init__(self, api_key, session=None):
3232
self.request_method = session
3333

3434
def get_top_headlines( # noqa: C901
35-
self, q=None, qintitle=None, sources=None, language="en", country=None, category=None, page_size=None, page=None
35+
self, q=None, qintitle=None, sources=None, language=None, country=None, category=None, page_size=None, page=None
3636
):
3737
"""Call the `/top-headlines` endpoint.
3838
@@ -116,17 +116,18 @@ def get_top_headlines( # noqa: C901
116116
# Language
117117
if language is not None:
118118
if is_valid_string(language):
119-
if language in const.languages:
119+
if language in const.LANGUAGES:
120120
payload["language"] = language
121121
else:
122122
raise ValueError("invalid language")
123123
else:
124124
raise TypeError("language param should be of type str")
125125

126+
126127
# Country
127128
if country is not None:
128129
if is_valid_string(country):
129-
if country in const.countries:
130+
if country in const.COUNTRIES:
130131
payload["country"] = country
131132
else:
132133
raise ValueError("invalid country")
@@ -136,7 +137,7 @@ def get_top_headlines( # noqa: C901
136137
# Category
137138
if category is not None:
138139
if is_valid_string(category):
139-
if category in const.categories:
140+
if category in const.CATEGORIES:
140141
payload["category"] = category
141142
else:
142143
raise ValueError("invalid category")
@@ -162,7 +163,8 @@ def get_top_headlines( # noqa: C901
162163
raise ValueError("page param should be an int greater than 0")
163164
else:
164165
raise TypeError("page param should be an int")
165-
166+
if payload.get("language") is None:
167+
payload["language"] = const.DEFAULT_LANGUAGES.get(country)
166168
# Send Request
167169
r = self.request_method.get(const.TOP_HEADLINES_URL, auth=self.auth, timeout=30, params=payload)
168170

@@ -291,7 +293,7 @@ def get_everything( # noqa: C901
291293
# Language
292294
if language is not None:
293295
if is_valid_string(language):
294-
if language not in const.languages:
296+
if language not in const.LANGUAGES:
295297
raise ValueError("invalid language")
296298
else:
297299
payload["language"] = language
@@ -301,7 +303,7 @@ def get_everything( # noqa: C901
301303
# Sort Method
302304
if sort_by is not None:
303305
if is_valid_string(sort_by):
304-
if sort_by in const.sort_method:
306+
if sort_by in const.SORT_METHOD:
305307
payload["sortBy"] = sort_by
306308
else:
307309
raise ValueError("invalid sort")
@@ -330,7 +332,7 @@ def get_everything( # noqa: C901
330332

331333
# Send Request
332334
r = self.request_method.get(const.EVERYTHING_URL, auth=self.auth, timeout=30, params=payload)
333-
335+
334336
# Check Status of Request
335337
if r.status_code != requests.codes.ok:
336338
raise NewsAPIException(r.json())
@@ -364,7 +366,7 @@ def get_sources(self, category=None, language=None, country=None): # noqa: C901
364366
# Language
365367
if language is not None:
366368
if is_valid_string(language):
367-
if language in const.languages:
369+
if language in const.LANGUAGES:
368370
payload["language"] = language
369371
else:
370372
raise ValueError("invalid language")
@@ -374,7 +376,7 @@ def get_sources(self, category=None, language=None, country=None): # noqa: C901
374376
# Country
375377
if country is not None:
376378
if is_valid_string(country):
377-
if country in const.countries:
379+
if country in const.COUNTRIES:
378380
payload["country"] = country
379381
else:
380382
raise ValueError("invalid country")
@@ -384,14 +386,16 @@ def get_sources(self, category=None, language=None, country=None): # noqa: C901
384386
# Category
385387
if category is not None:
386388
if is_valid_string(category):
387-
if category in const.categories:
389+
if category in const.CATEGORIES:
388390
payload["category"] = category
389391
else:
390392
raise ValueError("invalid category")
391393
else:
392394
raise TypeError("category param should be of type str")
393395

394396
# Send Request
397+
if payload.get("language") is None:
398+
payload["language"] = const.DEFAULT_LANGUAGES.get(country)
395399
r = self.request_method.get(const.SOURCES_URL, auth=self.auth, timeout=30, params=payload)
396400

397401
# Check Status of Request

0 commit comments

Comments
 (0)