1package newssearch
2
3// Copyright (c) Microsoft Corporation. All rights reserved.
4// Licensed under the MIT License. See License.txt in the project root for license information.
5//
6// Code generated by Microsoft (R) AutoRest Code Generator.
7// Changes may cause incorrect behavior and will be lost if the code is regenerated.
8
9import (
10	"context"
11	"github.com/Azure/go-autorest/autorest"
12	"github.com/Azure/go-autorest/autorest/azure"
13	"github.com/Azure/go-autorest/tracing"
14	"net/http"
15)
16
17// NewsClient is the the News Search API lets you send a search query to Bing and get back a list of news that are
18// relevant to the search query. This section provides technical details about the query parameters and headers that
19// you use to request news and the JSON response objects that contain them. For examples that show how to make
20// requests, see [Searching the web for
21// news](https://docs.microsoft.com/en-us/azure/cognitive-services/bing-news-search/search-the-web).
22type NewsClient struct {
23	BaseClient
24}
25
26// NewNewsClient creates an instance of the NewsClient client.
27func NewNewsClient() NewsClient {
28	return NewsClient{New()}
29}
30
31// Category sends the category request.
32// Parameters:
33// acceptLanguage - a comma-delimited list of one or more languages to use for user interface strings. The list
34// is in decreasing order of preference. For additional information, including expected format, see
35// [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This header and the
36// [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#setlang)
37// query parameter are mutually exclusive; do not specify both. If you set this header, you must also specify
38// the [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#cc) query
39// parameter. To determine the market to return results for, Bing uses the first supported language it finds
40// from the list and combines it with the cc parameter value. If the list does not include a supported
41// language, Bing finds the closest language and market that supports the request or it uses an aggregated or
42// default market for the results. To determine the market that Bing used, see the BingAPIs-Market header. Use
43// this header and the cc query parameter only if you specify multiple languages. Otherwise, use the
44// [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#mkt) and
45// [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#setlang)
46// query parameters. A user interface string is a string that's used as a label in a user interface. There are
47// few user interface strings in the JSON response objects. Any links to Bing.com properties in the response
48// objects apply the specified language.
49// userAgent - the user agent originating the request. Bing uses the user agent to provide mobile users with an
50// optimized experience. Although optional, you are encouraged to always specify this header. The user-agent
51// should be the same string that any commonly used browser sends. For information about user agents, see [RFC
52// 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following are examples of user-agent
53// strings. Windows Phone: Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0;
54// ARM; Touch; NOKIA; Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH - I500 Build /
55// GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version / 4.0 Mobile Safari / 533.1. iPhone: Mozilla /
56// 5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
57// iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3; WOW64; Trident / 7.0; Touch;
58// rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML,
59// like Gecko) Version / 7.0 Mobile / 11A465 Safari / 9537.53
60// clientID - bing uses this header to provide users with consistent behavior across Bing API calls. Bing often
61// flights new features and improvements, and it uses the client ID as a key for assigning traffic on different
62// flights. If you do not use the same client ID for a user across multiple requests, then Bing may assign the
63// user to multiple conflicting flights. Being assigned to multiple conflicting flights can lead to an
64// inconsistent user experience. For example, if the second request has a different flight assignment than the
65// first, the experience may be unexpected. Also, Bing can use the client ID to tailor web results to that
66// client ID’s search history, providing a richer experience for the user. Bing also uses this header to help
67// improve result rankings by analyzing the activity generated by a client ID. The relevance improvements help
68// with better quality of results delivered by Bing APIs and in turn enables higher click-through rates for the
69// API consumer. IMPORTANT: Although optional, you should consider this header required. Persisting the client
70// ID across multiple requests for the same end user and device combination enables 1) the API consumer to
71// receive a consistent user experience, and 2) higher click-through rates via better quality of results from
72// the Bing APIs. Each user that uses your application on the device must have a unique, Bing generated client
73// ID. If you do not include this header in the request, Bing generates an ID and returns it in the
74// X-MSEdge-ClientID response header. The only time that you should NOT include this header in a request is the
75// first time the user uses your app on that device. Use the client ID for each Bing API request that your app
76// makes for this user on the device. Persist the client ID. To persist the ID in a browser app, use a
77// persistent HTTP cookie to ensure the ID is used across all sessions. Do not use a session cookie. For other
78// apps such as mobile apps, use the device's persistent storage to persist the ID. The next time the user uses
79// your app on that device, get the client ID that you persisted. Bing responses may or may not include this
80// header. If the response includes this header, capture the client ID and use it for all subsequent Bing
81// requests for the user on that device. If you include the X-MSEdge-ClientID, you must not include cookies in
82// the request.
83// clientIP - the IPv4 or IPv6 address of the client device. The IP address is used to discover the user's
84// location. Bing uses the location information to determine safe search behavior. Although optional, you are
85// encouraged to always specify this header and the X-Search-Location header. Do not obfuscate the address (for
86// example, by changing the last octet to 0). Obfuscating the address results in the location not being
87// anywhere near the device's actual location, which may result in Bing serving erroneous results.
88// location - a semicolon-delimited list of key/value pairs that describe the client's geographical location.
89// Bing uses the location information to determine safe search behavior and to return relevant local content.
90// Specify the key/value pair as <key>:<value>. The following are the keys that you use to specify the user's
91// location. lat (required): The latitude of the client's location, in degrees. The latitude must be greater
92// than or equal to -90.0 and less than or equal to +90.0. Negative values indicate southern latitudes and
93// positive values indicate northern latitudes. long (required): The longitude of the client's location, in
94// degrees. The longitude must be greater than or equal to -180.0 and less than or equal to +180.0. Negative
95// values indicate western longitudes and positive values indicate eastern longitudes. re (required): The
96// radius, in meters, which specifies the horizontal accuracy of the coordinates. Pass the value returned by
97// the device's location service. Typical values might be 22m for GPS/Wi-Fi, 380m for cell tower triangulation,
98// and 18,000m for reverse IP lookup. ts (optional): The UTC UNIX timestamp of when the client was at the
99// location. (The UNIX timestamp is the number of seconds since January 1, 1970.) head (optional): The client's
100// relative heading or direction of travel. Specify the direction of travel as degrees from 0 through 360,
101// counting clockwise relative to true north. Specify this key only if the sp key is nonzero. sp (optional):
102// The horizontal velocity (speed), in meters per second, that the client device is traveling. alt (optional):
103// The altitude of the client device, in meters. are (optional): The radius, in meters, that specifies the
104// vertical accuracy of the coordinates. Specify this key only if you specify the alt key. Although many of the
105// keys are optional, the more information that you provide, the more accurate the location results are.
106// Although optional, you are encouraged to always specify the user's geographical location. Providing the
107// location is especially important if the client's IP address does not accurately reflect the user's physical
108// location (for example, if the client uses VPN). For optimal results, you should include this header and the
109// X-MSEdge-ClientIP header, but at a minimum, you should include this header.
110// countryCode - a 2-character country code of the country where the results come from. This API supports only
111// the United States market. If you specify this query parameter, it must be set to us. If you set this
112// parameter, you must also specify the Accept-Language header. Bing uses the first supported language it finds
113// from the languages list, and combine that language with the country code that you specify to determine the
114// market to return results for. If the languages list does not include a supported language, Bing finds the
115// closest language and market that supports the request, or it may use an aggregated or default market for the
116// results instead of a specified one. You should use this query parameter and the Accept-Language query
117// parameter only if you specify multiple languages; otherwise, you should use the mkt and setLang query
118// parameters. This parameter and the mkt query parameter are mutually exclusive—do not specify both.
119// category - the category of articles to return. For example, Sports articles or Entertainment articles. For a
120// list of possible categories, see [News Categories by
121// Market](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#categories-by-market).
122// Use this parameter only with News Category API. If you do not specify this parameter, the response includes
123// both: Headline articles typically published in the last 24 hours from any category and articles from each
124// parent category (up to four articles). If the article is a headline, the article's headline field is set to
125// true. By default, the response includes up to 12 headline articles. To specify the number of headline
126// articles to return, set the
127// [headlineCount](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#headlineCount)
128// query parameter.
129// count - the number of news articles to return in the response. The actual number delivered may be less than
130// requested. The default is 10 and the maximum value is 100. The actual number delivered may be less than
131// requested.You may use this parameter along with the offset parameter to page results. For example, if your
132// user interface displays 20 articles per page, set count to 20 and offset to 0 to get the first page of
133// results. For each subsequent page, increment offset by 20 (for example, 0, 20, 40). It is possible for
134// multiple pages to include some overlap in results. If you do not specify the
135// [category](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#category)
136// parameter, Bing ignores this parameter.
137// headlineCount - the number of headline articles to return in the response. The default is 12. Specify this
138// parameter only if you do not specify the
139// [category](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#category)
140// parameter.
141// market - the market where the results come from. Typically, mkt is the country where the user is making the
142// request from. However, it could be a different country if the user is not located in a country where Bing
143// delivers results. The market must be in the form <language code>-<country code>. For example, en-US. The
144// string is case insensitive. For a list of possible market values, see [Market
145// Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#market-codes).
146// NOTE: If known, you are encouraged to always specify the market. Specifying the market helps Bing route the
147// request and return an appropriate and optimal response. If you specify a market that is not listed in
148// [Market
149// Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#market-codes),
150// Bing uses a best fit market code based on an internal mapping that is subject to change. This parameter and
151// the [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#cc) query
152// parameter are mutually exclusive—do not specify both.
153// offset - the zero-based offset that indicates the number of news to skip before returning news. The default
154// is 0. The offset should be less than
155// ([totalEstimatedMatches](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#news-totalmatches)
156// - count). Use this parameter along with the count parameter to page results. For example, if your user
157// interface displays 20 news per page, set count to 20 and offset to 0 to get the first page of results. For
158// each subsequent page, increment offset by 20 (for example, 0, 20, 40). It is possible for multiple pages to
159// include some overlap in results. If you do not specify the
160// [category](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#category)
161// parameter, Bing ignores this parameter.
162// originalImage - a Boolean value that determines whether the image's contentUrl contains a URL that points to
163// a thumbnail of the original article's image or the image itself. If the article includes an image, and this
164// parameter is set to true, the image's contentUrl property contains a URL that you may use to download the
165// original image from the publisher's website. Otherwise, if this parameter is false, the image's contentUrl
166// and thumbnailUrl URLs both point to the same thumbnail image. Use this parameter only with the News Search
167// API or News Category API. Trending Topics API ignore this parameter.
168// safeSearch - filter news for adult content. The following are the possible filter values. Off: Return news
169// articles with adult text, images, or videos. Moderate: Return news articles with adult text but not adult
170// images or videos. Strict: Do not return news articles with adult text, images, or videos. If the request
171// comes from a market that Bing's adult policy requires that safeSearch is set to Strict, Bing ignores the
172// safeSearch value and uses Strict. If you use the site: query operator, there is the chance that the response
173// may contain adult content regardless of what the safeSearch query parameter is set to. Use site: only if you
174// are aware of the content on the site and your scenario supports the possibility of adult content.
175// setLang - the language to use for user interface strings. Specify the language using the ISO 639-1 2-letter
176// language code. For example, the language code for English is EN. The default is EN (English). Although
177// optional, you should always specify the language. Typically, you set setLang to the same language specified
178// by mkt unless the user wants the user interface strings displayed in a different language. This parameter
179// and the
180// [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#acceptlanguage)
181// header are mutually exclusive; do not specify both. A user interface string is a string that's used as a
182// label in a user interface. There are few user interface strings in the JSON response objects. Also, any
183// links to Bing.com properties in the response objects apply the specified language.
184// textDecorations - a Boolean value that determines whether display strings contain decoration markers such as
185// hit highlighting characters. If true, the strings may include markers. The default is false. To specify
186// whether to use Unicode characters or HTML tags as the markers, see the
187// [textFormat](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#textformat)
188// query parameter. For information about hit highlighting, see [Hit
189// Highlighting](https://docs.microsoft.com/azure/cognitive-services/bing-news-search/hit-highlighting).
190// textFormat - the type of markers to use for text decorations (see the textDecorations query parameter).
191// Possible values are Raw—Use Unicode characters to mark content that needs special formatting. The Unicode
192// characters are in the range E000 through E019. For example, Bing uses E000 and E001 to mark the beginning
193// and end of query terms for hit highlighting. HTML—Use HTML tags to mark content that needs special
194// formatting. For example, use <b> tags to highlight query terms in display strings. The default is Raw. For
195// display strings that contain escapable HTML characters such as <, >, and &, if textFormat is set to HTML,
196// Bing escapes the characters as appropriate (for example, < is escaped to &lt;).
197func (client NewsClient) Category(ctx context.Context, acceptLanguage string, userAgent string, clientID string, clientIP string, location string, countryCode string, category string, count *int32, headlineCount *int32, market string, offset *int32, originalImage *bool, safeSearch SafeSearch, setLang string, textDecorations *bool, textFormat TextFormat) (result News, err error) {
198	if tracing.IsEnabled() {
199		ctx = tracing.StartSpan(ctx, fqdn+"/NewsClient.Category")
200		defer func() {
201			sc := -1
202			if result.Response.Response != nil {
203				sc = result.Response.Response.StatusCode
204			}
205			tracing.EndSpan(ctx, sc, err)
206		}()
207	}
208	req, err := client.CategoryPreparer(ctx, acceptLanguage, userAgent, clientID, clientIP, location, countryCode, category, count, headlineCount, market, offset, originalImage, safeSearch, setLang, textDecorations, textFormat)
209	if err != nil {
210		err = autorest.NewErrorWithError(err, "newssearch.NewsClient", "Category", nil, "Failure preparing request")
211		return
212	}
213
214	resp, err := client.CategorySender(req)
215	if err != nil {
216		result.Response = autorest.Response{Response: resp}
217		err = autorest.NewErrorWithError(err, "newssearch.NewsClient", "Category", resp, "Failure sending request")
218		return
219	}
220
221	result, err = client.CategoryResponder(resp)
222	if err != nil {
223		err = autorest.NewErrorWithError(err, "newssearch.NewsClient", "Category", resp, "Failure responding to request")
224		return
225	}
226
227	return
228}
229
230// CategoryPreparer prepares the Category request.
231func (client NewsClient) CategoryPreparer(ctx context.Context, acceptLanguage string, userAgent string, clientID string, clientIP string, location string, countryCode string, category string, count *int32, headlineCount *int32, market string, offset *int32, originalImage *bool, safeSearch SafeSearch, setLang string, textDecorations *bool, textFormat TextFormat) (*http.Request, error) {
232	urlParameters := map[string]interface{}{
233		"Endpoint": client.Endpoint,
234	}
235
236	queryParameters := map[string]interface{}{}
237	if len(countryCode) > 0 {
238		queryParameters["cc"] = autorest.Encode("query", countryCode)
239	}
240	if len(category) > 0 {
241		queryParameters["category"] = autorest.Encode("query", category)
242	}
243	if count != nil {
244		queryParameters["count"] = autorest.Encode("query", *count)
245	}
246	if headlineCount != nil {
247		queryParameters["headlineCount"] = autorest.Encode("query", *headlineCount)
248	}
249	if len(market) > 0 {
250		queryParameters["mkt"] = autorest.Encode("query", market)
251	}
252	if offset != nil {
253		queryParameters["offset"] = autorest.Encode("query", *offset)
254	}
255	if originalImage != nil {
256		queryParameters["originalImg"] = autorest.Encode("query", *originalImage)
257	}
258	if len(string(safeSearch)) > 0 {
259		queryParameters["safeSearch"] = autorest.Encode("query", safeSearch)
260	}
261	if len(setLang) > 0 {
262		queryParameters["setLang"] = autorest.Encode("query", setLang)
263	}
264	if textDecorations != nil {
265		queryParameters["textDecorations"] = autorest.Encode("query", *textDecorations)
266	}
267	if len(string(textFormat)) > 0 {
268		queryParameters["textFormat"] = autorest.Encode("query", textFormat)
269	}
270
271	preparer := autorest.CreatePreparer(
272		autorest.AsGet(),
273		autorest.WithCustomBaseURL("{Endpoint}/bing/v7.0", urlParameters),
274		autorest.WithPath("/news"),
275		autorest.WithQueryParameters(queryParameters),
276		autorest.WithHeader("X-BingApis-SDK", "true"))
277	if len(acceptLanguage) > 0 {
278		preparer = autorest.DecoratePreparer(preparer,
279			autorest.WithHeader("Accept-Language", autorest.String(acceptLanguage)))
280	}
281	if len(userAgent) > 0 {
282		preparer = autorest.DecoratePreparer(preparer,
283			autorest.WithHeader("User-Agent", autorest.String(userAgent)))
284	}
285	if len(clientID) > 0 {
286		preparer = autorest.DecoratePreparer(preparer,
287			autorest.WithHeader("X-MSEdge-ClientID", autorest.String(clientID)))
288	}
289	if len(clientIP) > 0 {
290		preparer = autorest.DecoratePreparer(preparer,
291			autorest.WithHeader("X-MSEdge-ClientIP", autorest.String(clientIP)))
292	}
293	if len(location) > 0 {
294		preparer = autorest.DecoratePreparer(preparer,
295			autorest.WithHeader("X-Search-Location", autorest.String(location)))
296	}
297	return preparer.Prepare((&http.Request{}).WithContext(ctx))
298}
299
300// CategorySender sends the Category request. The method will close the
301// http.Response Body if it receives an error.
302func (client NewsClient) CategorySender(req *http.Request) (*http.Response, error) {
303	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
304}
305
306// CategoryResponder handles the response to the Category request. The method always
307// closes the http.Response Body.
308func (client NewsClient) CategoryResponder(resp *http.Response) (result News, err error) {
309	err = autorest.Respond(
310		resp,
311		azure.WithErrorUnlessStatusCode(http.StatusOK),
312		autorest.ByUnmarshallingJSON(&result),
313		autorest.ByClosing())
314	result.Response = autorest.Response{Response: resp}
315	return
316}
317
318// Search sends the search request.
319// Parameters:
320// query - the user's search query string. The query string cannot be empty. The query string may contain [Bing
321// Advanced Operators](http://msdn.microsoft.com/library/ff795620.aspx). For example, to limit news to a
322// specific domain, use the [site:](http://msdn.microsoft.com/library/ff795613.aspx) operator. Use this
323// parameter only with the News Search API. Do not specify this parameter when calling the Trending Topics API
324// or News Category API.
325// acceptLanguage - a comma-delimited list of one or more languages to use for user interface strings. The list
326// is in decreasing order of preference. For additional information, including expected format, see
327// [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This header and the
328// [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#setlang)
329// query parameter are mutually exclusive; do not specify both. If you set this header, you must also specify
330// the [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#cc) query
331// parameter. To determine the market to return results for, Bing uses the first supported language it finds
332// from the list and combines it with the cc parameter value. If the list does not include a supported
333// language, Bing finds the closest language and market that supports the request or it uses an aggregated or
334// default market for the results. To determine the market that Bing used, see the BingAPIs-Market header. Use
335// this header and the cc query parameter only if you specify multiple languages. Otherwise, use the
336// [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#mkt) and
337// [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#setlang)
338// query parameters. A user interface string is a string that's used as a label in a user interface. There are
339// few user interface strings in the JSON response objects. Any links to Bing.com properties in the response
340// objects apply the specified language.
341// userAgent - the user agent originating the request. Bing uses the user agent to provide mobile users with an
342// optimized experience. Although optional, you are encouraged to always specify this header. The user-agent
343// should be the same string that any commonly used browser sends. For information about user agents, see [RFC
344// 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following are examples of user-agent
345// strings. Windows Phone: Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0;
346// ARM; Touch; NOKIA; Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH - I500 Build /
347// GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version / 4.0 Mobile Safari / 533.1. iPhone: Mozilla /
348// 5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
349// iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3; WOW64; Trident / 7.0; Touch;
350// rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML,
351// like Gecko) Version / 7.0 Mobile / 11A465 Safari / 9537.53
352// clientID - bing uses this header to provide users with consistent behavior across Bing API calls. Bing often
353// flights new features and improvements, and it uses the client ID as a key for assigning traffic on different
354// flights. If you do not use the same client ID for a user across multiple requests, then Bing may assign the
355// user to multiple conflicting flights. Being assigned to multiple conflicting flights can lead to an
356// inconsistent user experience. For example, if the second request has a different flight assignment than the
357// first, the experience may be unexpected. Also, Bing can use the client ID to tailor web results to that
358// client ID’s search history, providing a richer experience for the user. Bing also uses this header to help
359// improve result rankings by analyzing the activity generated by a client ID. The relevance improvements help
360// with better quality of results delivered by Bing APIs and in turn enables higher click-through rates for the
361// API consumer. IMPORTANT: Although optional, you should consider this header required. Persisting the client
362// ID across multiple requests for the same end user and device combination enables 1) the API consumer to
363// receive a consistent user experience, and 2) higher click-through rates via better quality of results from
364// the Bing APIs. Each user that uses your application on the device must have a unique, Bing generated client
365// ID. If you do not include this header in the request, Bing generates an ID and returns it in the
366// X-MSEdge-ClientID response header. The only time that you should NOT include this header in a request is the
367// first time the user uses your app on that device. Use the client ID for each Bing API request that your app
368// makes for this user on the device. Persist the client ID. To persist the ID in a browser app, use a
369// persistent HTTP cookie to ensure the ID is used across all sessions. Do not use a session cookie. For other
370// apps such as mobile apps, use the device's persistent storage to persist the ID. The next time the user uses
371// your app on that device, get the client ID that you persisted. Bing responses may or may not include this
372// header. If the response includes this header, capture the client ID and use it for all subsequent Bing
373// requests for the user on that device. If you include the X-MSEdge-ClientID, you must not include cookies in
374// the request.
375// clientIP - the IPv4 or IPv6 address of the client device. The IP address is used to discover the user's
376// location. Bing uses the location information to determine safe search behavior. Although optional, you are
377// encouraged to always specify this header and the X-Search-Location header. Do not obfuscate the address (for
378// example, by changing the last octet to 0). Obfuscating the address results in the location not being
379// anywhere near the device's actual location, which may result in Bing serving erroneous results.
380// location - a semicolon-delimited list of key/value pairs that describe the client's geographical location.
381// Bing uses the location information to determine safe search behavior and to return relevant local content.
382// Specify the key/value pair as <key>:<value>. The following are the keys that you use to specify the user's
383// location. lat (required): The latitude of the client's location, in degrees. The latitude must be greater
384// than or equal to -90.0 and less than or equal to +90.0. Negative values indicate southern latitudes and
385// positive values indicate northern latitudes. long (required): The longitude of the client's location, in
386// degrees. The longitude must be greater than or equal to -180.0 and less than or equal to +180.0. Negative
387// values indicate western longitudes and positive values indicate eastern longitudes. re (required): The
388// radius, in meters, which specifies the horizontal accuracy of the coordinates. Pass the value returned by
389// the device's location service. Typical values might be 22m for GPS/Wi-Fi, 380m for cell tower triangulation,
390// and 18,000m for reverse IP lookup. ts (optional): The UTC UNIX timestamp of when the client was at the
391// location. (The UNIX timestamp is the number of seconds since January 1, 1970.) head (optional): The client's
392// relative heading or direction of travel. Specify the direction of travel as degrees from 0 through 360,
393// counting clockwise relative to true north. Specify this key only if the sp key is nonzero. sp (optional):
394// The horizontal velocity (speed), in meters per second, that the client device is traveling. alt (optional):
395// The altitude of the client device, in meters. are (optional): The radius, in meters, that specifies the
396// vertical accuracy of the coordinates. Specify this key only if you specify the alt key. Although many of the
397// keys are optional, the more information that you provide, the more accurate the location results are.
398// Although optional, you are encouraged to always specify the user's geographical location. Providing the
399// location is especially important if the client's IP address does not accurately reflect the user's physical
400// location (for example, if the client uses VPN). For optimal results, you should include this header and the
401// X-MSEdge-ClientIP header, but at a minimum, you should include this header.
402// countryCode - a 2-character country code of the country where the results come from. This API supports only
403// the United States market. If you specify this query parameter, it must be set to us. If you set this
404// parameter, you must also specify the Accept-Language header. Bing uses the first supported language it finds
405// from the languages list, and combine that language with the country code that you specify to determine the
406// market to return results for. If the languages list does not include a supported language, Bing finds the
407// closest language and market that supports the request, or it may use an aggregated or default market for the
408// results instead of a specified one. You should use this query parameter and the Accept-Language query
409// parameter only if you specify multiple languages; otherwise, you should use the mkt and setLang query
410// parameters. This parameter and the mkt query parameter are mutually exclusive—do not specify both.
411// count - the number of news articles to return in the response. The actual number delivered may be less than
412// requested. The default is 10 and the maximum value is 100. The actual number delivered may be less than
413// requested.You may use this parameter along with the offset parameter to page results. For example, if your
414// user interface displays 20 articles per page, set count to 20 and offset to 0 to get the first page of
415// results. For each subsequent page, increment offset by 20 (for example, 0, 20, 40). It is possible for
416// multiple pages to include some overlap in results.
417// freshness - filter news by the date and time that Bing discovered the news. The following are the possible
418// filter values. Day: Return news discovered within the last 24 hours. Week: Return news discovered within the
419// last 7 days. Month: Return news discovered within the last 30 days. Use this parameter only with the News
420// Search API. Do not specify this parameter when calling the News Category API or the Trending Topics API.
421// market - the market where the results come from. Typically, mkt is the country where the user is making the
422// request from. However, it could be a different country if the user is not located in a country where Bing
423// delivers results. The market must be in the form <language code>-<country code>. For example, en-US. The
424// string is case insensitive. For a list of possible market values, see [Market
425// Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#market-codes).
426// NOTE: If known, you are encouraged to always specify the market. Specifying the market helps Bing route the
427// request and return an appropriate and optimal response. If you specify a market that is not listed in
428// [Market
429// Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#market-codes),
430// Bing uses a best fit market code based on an internal mapping that is subject to change. This parameter and
431// the [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#cc) query
432// parameter are mutually exclusive—do not specify both.
433// offset - the zero-based offset that indicates the number of news to skip before returning news. The default
434// is 0. The offset should be less than
435// ([totalEstimatedMatches](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#news-totalmatches)
436// - count). Use this parameter along with the count parameter to page results. For example, if your user
437// interface displays 20 news per page, set count to 20 and offset to 0 to get the first page of results. For
438// each subsequent page, increment offset by 20 (for example, 0, 20, 40). It is possible for multiple pages to
439// include some overlap in results.
440// originalImage - a Boolean value that determines whether the image's contentUrl contains a URL that points to
441// a thumbnail of the original article's image or the image itself. If the article includes an image, and this
442// parameter is set to true, the image's contentUrl property contains a URL that you may use to download the
443// original image from the publisher's website. Otherwise, if this parameter is false, the image's contentUrl
444// and thumbnailUrl URLs both point to the same thumbnail image. Use this parameter only with the News Search
445// API. Do not specify this parameter when calling the Trending Topics API or News Category API.
446// safeSearch - filter news for adult content. The following are the possible filter values. Off: Return news
447// articles with adult text, images, or videos. Moderate: Return news articles with adult text but not adult
448// images or videos. Strict: Do not return news articles with adult text, images, or videos. If the request
449// comes from a market that Bing's adult policy requires that safeSearch is set to Strict, Bing ignores the
450// safeSearch value and uses Strict. If you use the site: query operator, there is the chance that the response
451// may contain adult content regardless of what the safeSearch query parameter is set to. Use site: only if you
452// are aware of the content on the site and your scenario supports the possibility of adult content.
453// setLang - the language to use for user interface strings. Specify the language using the ISO 639-1 2-letter
454// language code. For example, the language code for English is EN. The default is EN (English). Although
455// optional, you should always specify the language. Typically, you set setLang to the same language specified
456// by mkt unless the user wants the user interface strings displayed in a different language. This parameter
457// and the
458// [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#acceptlanguage)
459// header are mutually exclusive; do not specify both. A user interface string is a string that's used as a
460// label in a user interface. There are few user interface strings in the JSON response objects. Also, any
461// links to Bing.com properties in the response objects apply the specified language.
462// sortBy - the order to return the news in. The following are the possible case-insensitive values. Date: If
463// the request is through the News Search API, the response returns news articles sorted by date from the most
464// recent to the oldest. If the request is through the News Trending Topics API, the response returns trending
465// topics sorted by date from the most recent to the oldest.
466// textDecorations - a Boolean value that determines whether display strings contain decoration markers such as
467// hit highlighting characters. If true, the strings may include markers. The default is false. To specify
468// whether to use Unicode characters or HTML tags as the markers, see the
469// [textFormat](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#textformat)
470// query parameter. For information about hit highlighting, see [Hit
471// Highlighting](https://docs.microsoft.com/azure/cognitive-services/bing-news-search/hit-highlighting).
472// textFormat - the type of markers to use for text decorations (see the textDecorations query parameter).
473// Possible values are Raw—Use Unicode characters to mark content that needs special formatting. The Unicode
474// characters are in the range E000 through E019. For example, Bing uses E000 and E001 to mark the beginning
475// and end of query terms for hit highlighting. HTML—Use HTML tags to mark content that needs special
476// formatting. For example, use <b> tags to highlight query terms in display strings. The default is Raw. For
477// display strings that contain escapable HTML characters such as <, >, and &, if textFormat is set to HTML,
478// Bing escapes the characters as appropriate (for example, < is escaped to &lt;).
479func (client NewsClient) Search(ctx context.Context, query string, acceptLanguage string, userAgent string, clientID string, clientIP string, location string, countryCode string, count *int32, freshness Freshness, market string, offset *int32, originalImage *bool, safeSearch SafeSearch, setLang string, sortBy string, textDecorations *bool, textFormat TextFormat) (result News, err error) {
480	if tracing.IsEnabled() {
481		ctx = tracing.StartSpan(ctx, fqdn+"/NewsClient.Search")
482		defer func() {
483			sc := -1
484			if result.Response.Response != nil {
485				sc = result.Response.Response.StatusCode
486			}
487			tracing.EndSpan(ctx, sc, err)
488		}()
489	}
490	req, err := client.SearchPreparer(ctx, query, acceptLanguage, userAgent, clientID, clientIP, location, countryCode, count, freshness, market, offset, originalImage, safeSearch, setLang, sortBy, textDecorations, textFormat)
491	if err != nil {
492		err = autorest.NewErrorWithError(err, "newssearch.NewsClient", "Search", nil, "Failure preparing request")
493		return
494	}
495
496	resp, err := client.SearchSender(req)
497	if err != nil {
498		result.Response = autorest.Response{Response: resp}
499		err = autorest.NewErrorWithError(err, "newssearch.NewsClient", "Search", resp, "Failure sending request")
500		return
501	}
502
503	result, err = client.SearchResponder(resp)
504	if err != nil {
505		err = autorest.NewErrorWithError(err, "newssearch.NewsClient", "Search", resp, "Failure responding to request")
506		return
507	}
508
509	return
510}
511
512// SearchPreparer prepares the Search request.
513func (client NewsClient) SearchPreparer(ctx context.Context, query string, acceptLanguage string, userAgent string, clientID string, clientIP string, location string, countryCode string, count *int32, freshness Freshness, market string, offset *int32, originalImage *bool, safeSearch SafeSearch, setLang string, sortBy string, textDecorations *bool, textFormat TextFormat) (*http.Request, error) {
514	urlParameters := map[string]interface{}{
515		"Endpoint": client.Endpoint,
516	}
517
518	queryParameters := map[string]interface{}{
519		"q": autorest.Encode("query", query),
520	}
521	if len(countryCode) > 0 {
522		queryParameters["cc"] = autorest.Encode("query", countryCode)
523	}
524	if count != nil {
525		queryParameters["count"] = autorest.Encode("query", *count)
526	}
527	if len(string(freshness)) > 0 {
528		queryParameters["freshness"] = autorest.Encode("query", freshness)
529	}
530	if len(market) > 0 {
531		queryParameters["mkt"] = autorest.Encode("query", market)
532	}
533	if offset != nil {
534		queryParameters["offset"] = autorest.Encode("query", *offset)
535	}
536	if originalImage != nil {
537		queryParameters["originalImg"] = autorest.Encode("query", *originalImage)
538	}
539	if len(string(safeSearch)) > 0 {
540		queryParameters["safeSearch"] = autorest.Encode("query", safeSearch)
541	}
542	if len(setLang) > 0 {
543		queryParameters["setLang"] = autorest.Encode("query", setLang)
544	}
545	if len(sortBy) > 0 {
546		queryParameters["sortBy"] = autorest.Encode("query", sortBy)
547	}
548	if textDecorations != nil {
549		queryParameters["textDecorations"] = autorest.Encode("query", *textDecorations)
550	}
551	if len(string(textFormat)) > 0 {
552		queryParameters["textFormat"] = autorest.Encode("query", textFormat)
553	}
554
555	preparer := autorest.CreatePreparer(
556		autorest.AsGet(),
557		autorest.WithCustomBaseURL("{Endpoint}/bing/v7.0", urlParameters),
558		autorest.WithPath("/news/search"),
559		autorest.WithQueryParameters(queryParameters),
560		autorest.WithHeader("X-BingApis-SDK", "true"))
561	if len(acceptLanguage) > 0 {
562		preparer = autorest.DecoratePreparer(preparer,
563			autorest.WithHeader("Accept-Language", autorest.String(acceptLanguage)))
564	}
565	if len(userAgent) > 0 {
566		preparer = autorest.DecoratePreparer(preparer,
567			autorest.WithHeader("User-Agent", autorest.String(userAgent)))
568	}
569	if len(clientID) > 0 {
570		preparer = autorest.DecoratePreparer(preparer,
571			autorest.WithHeader("X-MSEdge-ClientID", autorest.String(clientID)))
572	}
573	if len(clientIP) > 0 {
574		preparer = autorest.DecoratePreparer(preparer,
575			autorest.WithHeader("X-MSEdge-ClientIP", autorest.String(clientIP)))
576	}
577	if len(location) > 0 {
578		preparer = autorest.DecoratePreparer(preparer,
579			autorest.WithHeader("X-Search-Location", autorest.String(location)))
580	}
581	return preparer.Prepare((&http.Request{}).WithContext(ctx))
582}
583
584// SearchSender sends the Search request. The method will close the
585// http.Response Body if it receives an error.
586func (client NewsClient) SearchSender(req *http.Request) (*http.Response, error) {
587	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
588}
589
590// SearchResponder handles the response to the Search request. The method always
591// closes the http.Response Body.
592func (client NewsClient) SearchResponder(resp *http.Response) (result News, err error) {
593	err = autorest.Respond(
594		resp,
595		azure.WithErrorUnlessStatusCode(http.StatusOK),
596		autorest.ByUnmarshallingJSON(&result),
597		autorest.ByClosing())
598	result.Response = autorest.Response{Response: resp}
599	return
600}
601
602// Trending sends the trending request.
603// Parameters:
604// acceptLanguage - a comma-delimited list of one or more languages to use for user interface strings. The list
605// is in decreasing order of preference. For additional information, including expected format, see
606// [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). This header and the
607// [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#setlang)
608// query parameter are mutually exclusive; do not specify both. If you set this header, you must also specify
609// the [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#cc) query
610// parameter. To determine the market to return results for, Bing uses the first supported language it finds
611// from the list and combines it with the cc parameter value. If the list does not include a supported
612// language, Bing finds the closest language and market that supports the request or it uses an aggregated or
613// default market for the results. To determine the market that Bing used, see the BingAPIs-Market header. Use
614// this header and the cc query parameter only if you specify multiple languages. Otherwise, use the
615// [mkt](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#mkt) and
616// [setLang](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#setlang)
617// query parameters. A user interface string is a string that's used as a label in a user interface. There are
618// few user interface strings in the JSON response objects. Any links to Bing.com properties in the response
619// objects apply the specified language.
620// userAgent - the user agent originating the request. Bing uses the user agent to provide mobile users with an
621// optimized experience. Although optional, you are encouraged to always specify this header. The user-agent
622// should be the same string that any commonly used browser sends. For information about user agents, see [RFC
623// 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html). The following are examples of user-agent
624// strings. Windows Phone: Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0;
625// ARM; Touch; NOKIA; Lumia 822). Android: Mozilla / 5.0 (Linux; U; Android 2.3.5; en - us; SCH - I500 Build /
626// GINGERBREAD) AppleWebKit / 533.1 (KHTML; like Gecko) Version / 4.0 Mobile Safari / 533.1. iPhone: Mozilla /
627// 5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit / 536.26 (KHTML; like Gecko) Mobile / 10B142
628// iPhone4; 1 BingWeb / 3.03.1428.20120423. PC: Mozilla / 5.0 (Windows NT 6.3; WOW64; Trident / 7.0; Touch;
629// rv:11.0) like Gecko. iPad: Mozilla / 5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit / 537.51.1 (KHTML,
630// like Gecko) Version / 7.0 Mobile / 11A465 Safari / 9537.53
631// clientID - bing uses this header to provide users with consistent behavior across Bing API calls. Bing often
632// flights new features and improvements, and it uses the client ID as a key for assigning traffic on different
633// flights. If you do not use the same client ID for a user across multiple requests, then Bing may assign the
634// user to multiple conflicting flights. Being assigned to multiple conflicting flights can lead to an
635// inconsistent user experience. For example, if the second request has a different flight assignment than the
636// first, the experience may be unexpected. Also, Bing can use the client ID to tailor web results to that
637// client ID’s search history, providing a richer experience for the user. Bing also uses this header to help
638// improve result rankings by analyzing the activity generated by a client ID. The relevance improvements help
639// with better quality of results delivered by Bing APIs and in turn enables higher click-through rates for the
640// API consumer. IMPORTANT: Although optional, you should consider this header required. Persisting the client
641// ID across multiple requests for the same end user and device combination enables 1) the API consumer to
642// receive a consistent user experience, and 2) higher click-through rates via better quality of results from
643// the Bing APIs. Each user that uses your application on the device must have a unique, Bing generated client
644// ID. If you do not include this header in the request, Bing generates an ID and returns it in the
645// X-MSEdge-ClientID response header. The only time that you should NOT include this header in a request is the
646// first time the user uses your app on that device. Use the client ID for each Bing API request that your app
647// makes for this user on the device. Persist the client ID. To persist the ID in a browser app, use a
648// persistent HTTP cookie to ensure the ID is used across all sessions. Do not use a session cookie. For other
649// apps such as mobile apps, use the device's persistent storage to persist the ID. The next time the user uses
650// your app on that device, get the client ID that you persisted. Bing responses may or may not include this
651// header. If the response includes this header, capture the client ID and use it for all subsequent Bing
652// requests for the user on that device. If you include the X-MSEdge-ClientID, you must not include cookies in
653// the request.
654// clientIP - the IPv4 or IPv6 address of the client device. The IP address is used to discover the user's
655// location. Bing uses the location information to determine safe search behavior. Although optional, you are
656// encouraged to always specify this header and the X-Search-Location header. Do not obfuscate the address (for
657// example, by changing the last octet to 0). Obfuscating the address results in the location not being
658// anywhere near the device's actual location, which may result in Bing serving erroneous results.
659// location - a semicolon-delimited list of key/value pairs that describe the client's geographical location.
660// Bing uses the location information to determine safe search behavior and to return relevant local content.
661// Specify the key/value pair as <key>:<value>. The following are the keys that you use to specify the user's
662// location. lat (required): The latitude of the client's location, in degrees. The latitude must be greater
663// than or equal to -90.0 and less than or equal to +90.0. Negative values indicate southern latitudes and
664// positive values indicate northern latitudes. long (required): The longitude of the client's location, in
665// degrees. The longitude must be greater than or equal to -180.0 and less than or equal to +180.0. Negative
666// values indicate western longitudes and positive values indicate eastern longitudes. re (required): The
667// radius, in meters, which specifies the horizontal accuracy of the coordinates. Pass the value returned by
668// the device's location service. Typical values might be 22m for GPS/Wi-Fi, 380m for cell tower triangulation,
669// and 18,000m for reverse IP lookup. ts (optional): The UTC UNIX timestamp of when the client was at the
670// location. (The UNIX timestamp is the number of seconds since January 1, 1970.) head (optional): The client's
671// relative heading or direction of travel. Specify the direction of travel as degrees from 0 through 360,
672// counting clockwise relative to true north. Specify this key only if the sp key is nonzero. sp (optional):
673// The horizontal velocity (speed), in meters per second, that the client device is traveling. alt (optional):
674// The altitude of the client device, in meters. are (optional): The radius, in meters, that specifies the
675// vertical accuracy of the coordinates. Specify this key only if you specify the alt key. Although many of the
676// keys are optional, the more information that you provide, the more accurate the location results are.
677// Although optional, you are encouraged to always specify the user's geographical location. Providing the
678// location is especially important if the client's IP address does not accurately reflect the user's physical
679// location (for example, if the client uses VPN). For optimal results, you should include this header and the
680// X-MSEdge-ClientIP header, but at a minimum, you should include this header.
681// countryCode - a 2-character country code of the country where the results come from. This API supports only
682// the United States market. If you specify this query parameter, it must be set to us. If you set this
683// parameter, you must also specify the Accept-Language header. Bing uses the first supported language it finds
684// from the languages list, and combine that language with the country code that you specify to determine the
685// market to return results for. If the languages list does not include a supported language, Bing finds the
686// closest language and market that supports the request, or it may use an aggregated or default market for the
687// results instead of a specified one. You should use this query parameter and the Accept-Language query
688// parameter only if you specify multiple languages; otherwise, you should use the mkt and setLang query
689// parameters. This parameter and the mkt query parameter are mutually exclusive—do not specify both.
690// count - the number of news articles to return in the response. The actual number delivered may be less than
691// requested. The default is 10 and the maximum value is 100. The actual number delivered may be less than
692// requested.You may use this parameter along with the offset parameter to page results. For example, if your
693// user interface displays 20 articles per page, set count to 20 and offset to 0 to get the first page of
694// results. For each subsequent page, increment offset by 20 (for example, 0, 20, 40). It is possible for
695// multiple pages to include some overlap in results.
696// market - the market where the results come from. Typically, mkt is the country where the user is making the
697// request from. However, it could be a different country if the user is not located in a country where Bing
698// delivers results. The market must be in the form <language code>-<country code>. For example, en-US. The
699// string is case insensitive. For a list of possible market values, see [Market
700// Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#market-codes).
701// NOTE: If known, you are encouraged to always specify the market. Specifying the market helps Bing route the
702// request and return an appropriate and optimal response. If you specify a market that is not listed in
703// [Market
704// Codes](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#market-codes),
705// Bing uses a best fit market code based on an internal mapping that is subject to change. This parameter and
706// the [cc](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#cc) query
707// parameter are mutually exclusive—do not specify both.
708// offset - the zero-based offset that indicates the number of news to skip before returning news. The default
709// is 0. The offset should be less than
710// ([totalEstimatedMatches](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#news-totalmatches)
711// - count). Use this parameter along with the count parameter to page results. For example, if your user
712// interface displays 20 news per page, set count to 20 and offset to 0 to get the first page of results. For
713// each subsequent page, increment offset by 20 (for example, 0, 20, 40). It is possible for multiple pages to
714// include some overlap in results.
715// safeSearch - filter news for adult content. The following are the possible filter values. Off: Return news
716// articles with adult text, images, or videos. Moderate: Return news articles with adult text but not adult
717// images or videos. Strict: Do not return news articles with adult text, images, or videos. If the request
718// comes from a market that Bing's adult policy requires that safeSearch is set to Strict, Bing ignores the
719// safeSearch value and uses Strict. If you use the site: query operator, there is the chance that the response
720// may contain adult content regardless of what the safeSearch query parameter is set to. Use site: only if you
721// are aware of the content on the site and your scenario supports the possibility of adult content.
722// setLang - the language to use for user interface strings. Specify the language using the ISO 639-1 2-letter
723// language code. For example, the language code for English is EN. The default is EN (English). Although
724// optional, you should always specify the language. Typically, you set setLang to the same language specified
725// by mkt unless the user wants the user interface strings displayed in a different language. This parameter
726// and the
727// [Accept-Language](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#acceptlanguage)
728// header are mutually exclusive; do not specify both. A user interface string is a string that's used as a
729// label in a user interface. There are few user interface strings in the JSON response objects. Also, any
730// links to Bing.com properties in the response objects apply the specified language.
731// since - the Unix epoch time (Unix timestamp) that Bing uses to select the trending topics. Bing returns
732// trending topics that it discovered on or after the specified date and time, not the date the topic was
733// published. To use this parameter, also specify the sortBy parameter. Use this parameter only with the News
734// Trending Topics API. Do not specify this parameter when calling the News Search API or News Category API.
735// sortBy - the order to return the news in. The following are the possible case-insensitive values. Date: If
736// the request is through the News Search API, the response returns news articles sorted by date from the most
737// recent to the oldest. If the request is through the News Trending Topics API, the response returns trending
738// topics sorted by date from the most recent to the oldest.
739// textDecorations - a Boolean value that determines whether display strings contain decoration markers such as
740// hit highlighting characters. If true, the strings may include markers. The default is false. To specify
741// whether to use Unicode characters or HTML tags as the markers, see the
742// [textFormat](https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-news-api-v7-reference#textformat)
743// query parameter. For information about hit highlighting, see [Hit
744// Highlighting](https://docs.microsoft.com/azure/cognitive-services/bing-news-search/hit-highlighting).
745// textFormat - the type of markers to use for text decorations (see the textDecorations query parameter).
746// Possible values are Raw—Use Unicode characters to mark content that needs special formatting. The Unicode
747// characters are in the range E000 through E019. For example, Bing uses E000 and E001 to mark the beginning
748// and end of query terms for hit highlighting. HTML—Use HTML tags to mark content that needs special
749// formatting. For example, use <b> tags to highlight query terms in display strings. The default is Raw. For
750// display strings that contain escapable HTML characters such as <, >, and &, if textFormat is set to HTML,
751// Bing escapes the characters as appropriate (for example, < is escaped to &lt;).
752func (client NewsClient) Trending(ctx context.Context, acceptLanguage string, userAgent string, clientID string, clientIP string, location string, countryCode string, count *int32, market string, offset *int32, safeSearch SafeSearch, setLang string, since *int64, sortBy string, textDecorations *bool, textFormat TextFormat) (result TrendingTopics, err error) {
753	if tracing.IsEnabled() {
754		ctx = tracing.StartSpan(ctx, fqdn+"/NewsClient.Trending")
755		defer func() {
756			sc := -1
757			if result.Response.Response != nil {
758				sc = result.Response.Response.StatusCode
759			}
760			tracing.EndSpan(ctx, sc, err)
761		}()
762	}
763	req, err := client.TrendingPreparer(ctx, acceptLanguage, userAgent, clientID, clientIP, location, countryCode, count, market, offset, safeSearch, setLang, since, sortBy, textDecorations, textFormat)
764	if err != nil {
765		err = autorest.NewErrorWithError(err, "newssearch.NewsClient", "Trending", nil, "Failure preparing request")
766		return
767	}
768
769	resp, err := client.TrendingSender(req)
770	if err != nil {
771		result.Response = autorest.Response{Response: resp}
772		err = autorest.NewErrorWithError(err, "newssearch.NewsClient", "Trending", resp, "Failure sending request")
773		return
774	}
775
776	result, err = client.TrendingResponder(resp)
777	if err != nil {
778		err = autorest.NewErrorWithError(err, "newssearch.NewsClient", "Trending", resp, "Failure responding to request")
779		return
780	}
781
782	return
783}
784
785// TrendingPreparer prepares the Trending request.
786func (client NewsClient) TrendingPreparer(ctx context.Context, acceptLanguage string, userAgent string, clientID string, clientIP string, location string, countryCode string, count *int32, market string, offset *int32, safeSearch SafeSearch, setLang string, since *int64, sortBy string, textDecorations *bool, textFormat TextFormat) (*http.Request, error) {
787	urlParameters := map[string]interface{}{
788		"Endpoint": client.Endpoint,
789	}
790
791	queryParameters := map[string]interface{}{}
792	if len(countryCode) > 0 {
793		queryParameters["cc"] = autorest.Encode("query", countryCode)
794	}
795	if count != nil {
796		queryParameters["count"] = autorest.Encode("query", *count)
797	}
798	if len(market) > 0 {
799		queryParameters["mkt"] = autorest.Encode("query", market)
800	}
801	if offset != nil {
802		queryParameters["offset"] = autorest.Encode("query", *offset)
803	}
804	if len(string(safeSearch)) > 0 {
805		queryParameters["safeSearch"] = autorest.Encode("query", safeSearch)
806	}
807	if len(setLang) > 0 {
808		queryParameters["setLang"] = autorest.Encode("query", setLang)
809	}
810	if since != nil {
811		queryParameters["since"] = autorest.Encode("query", *since)
812	}
813	if len(sortBy) > 0 {
814		queryParameters["sortBy"] = autorest.Encode("query", sortBy)
815	}
816	if textDecorations != nil {
817		queryParameters["textDecorations"] = autorest.Encode("query", *textDecorations)
818	}
819	if len(string(textFormat)) > 0 {
820		queryParameters["textFormat"] = autorest.Encode("query", textFormat)
821	}
822
823	preparer := autorest.CreatePreparer(
824		autorest.AsGet(),
825		autorest.WithCustomBaseURL("{Endpoint}/bing/v7.0", urlParameters),
826		autorest.WithPath("/news/trendingtopics"),
827		autorest.WithQueryParameters(queryParameters),
828		autorest.WithHeader("X-BingApis-SDK", "true"))
829	if len(acceptLanguage) > 0 {
830		preparer = autorest.DecoratePreparer(preparer,
831			autorest.WithHeader("Accept-Language", autorest.String(acceptLanguage)))
832	}
833	if len(userAgent) > 0 {
834		preparer = autorest.DecoratePreparer(preparer,
835			autorest.WithHeader("User-Agent", autorest.String(userAgent)))
836	}
837	if len(clientID) > 0 {
838		preparer = autorest.DecoratePreparer(preparer,
839			autorest.WithHeader("X-MSEdge-ClientID", autorest.String(clientID)))
840	}
841	if len(clientIP) > 0 {
842		preparer = autorest.DecoratePreparer(preparer,
843			autorest.WithHeader("X-MSEdge-ClientIP", autorest.String(clientIP)))
844	}
845	if len(location) > 0 {
846		preparer = autorest.DecoratePreparer(preparer,
847			autorest.WithHeader("X-Search-Location", autorest.String(location)))
848	}
849	return preparer.Prepare((&http.Request{}).WithContext(ctx))
850}
851
852// TrendingSender sends the Trending request. The method will close the
853// http.Response Body if it receives an error.
854func (client NewsClient) TrendingSender(req *http.Request) (*http.Response, error) {
855	return client.Send(req, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
856}
857
858// TrendingResponder handles the response to the Trending request. The method always
859// closes the http.Response Body.
860func (client NewsClient) TrendingResponder(resp *http.Response) (result TrendingTopics, err error) {
861	err = autorest.Respond(
862		resp,
863		azure.WithErrorUnlessStatusCode(http.StatusOK),
864		autorest.ByUnmarshallingJSON(&result),
865		autorest.ByClosing())
866	result.Response = autorest.Response{Response: resp}
867	return
868}
869