示例#1
0
        private IEnumerator RequestToken(string keyword, SafeSearch safeSearch, Action <string> tokenCallback)
        {
            var requestUrl = $"{url}?q={keyword}";
            // Debug.Log(requestUrl);
            var ao = UnityWebRequest.Get(requestUrl).SendWebRequest();

            yield return(new WaitUntil(() => ao.isDone));

            if (ao.webRequest.isNetworkError || ao.webRequest.isHttpError)
            {
                Debug.LogError("Requesting Failed ! " + ao.webRequest.error);
                tokenCallback.Invoke(null);
                yield break;
            }

            Regex regex = new Regex(@"vqd=([\d-]+)\&");
            var   match = regex.Match(ao.webRequest.downloadHandler.text);

            if (!match.Success)
            {
                Debug.LogError("Token Parsing Failed !");
                tokenCallback.Invoke(null);
                yield break;
            }

            var searchObj = match.Groups[1];

            tokenCallback.Invoke(match.Groups[1].Value);
        }
示例#2
0
        public static YoutubeSearch SafeSearch(this YoutubeSearch search, SafeSearch s)
        {
            var settings = search.Settings.Clone();

            settings.SafeSearch = s;
            return(Search(settings));
        }
示例#3
0
        public async Task SearchNotEmptyTest(string keywords, SafeSearch filter)
        {
            // Act
            var results = await DdgApi.SearchImagesAsync(keywords, filter);

            // Assert
            Assert.NotEmpty(results.Results);
        }
示例#4
0
 public static void Search(string text, SafeSearch safeSearch, int pageNo, string location, Action <ImageSearchResult> onCompleted)
 {
     if (!instance)
     {
         instance = new GameObject("DuckDuckGoAPI").AddComponent <Arikan.Duckduckgo.Api.ImagesApi>();
     }
     if (string.IsNullOrWhiteSpace(location))
     {
         location = "us-en";
     }
     instance.SearchFromInstance(text, safeSearch, pageNo, location, onCompleted);
 }
示例#5
0
        public string GetImageUrl(
            string searchTerm,
            int?height = null,
            AspectRatio aspectRatio       = AspectRatio.All,
            SafeSearch safeSearch         = SafeSearch.Moderate,
            ImageType imageType           = ImageType.Photo,
            ImageSize imageSize           = ImageSize.Medium,
            ImageFreshness imageFreshness = ImageFreshness.Year)
        {
            //validate search term
            if (string.IsNullOrWhiteSpace(searchTerm))
            {
                return(null);
            }

            //Construct the URI of the search request
            var uriQuery = UriBase + "?count=1&offset=0" +
                           (height.HasValue ? $"&height={height}" : "") +
                           $"&aspect={aspectRatio}" +
                           $"&safeSearch={safeSearch}" +
                           $"&imageType={imageType}" +
                           $"&size={imageSize}" +
                           $"&freshness={imageFreshness}" +
                           $"&q={Uri.EscapeDataString(searchTerm)}";

            //make a RESTful call to Bing...
            using (var httpClient = new HttpClient())
            {
                //add subscription to header
                httpClient.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", SubscriptionKey);

                //make request
                var response = httpClient.GetAsync(uriQuery).Result;

                //check status or throw exception
                if (!response.IsSuccessStatusCode)
                {
                    return(null);
                }

                //get response as JSON
                var json = response.Content.ReadAsStringAsync().Result;

                //deserialize the resulting json
                var searchResult = JsonConvert.DeserializeObject <SearchResult>(json);

                //get content URL
                return(searchResult?.value?.ElementAtOrDefault(0)?.contentUrl);
            }
        }
示例#6
0
        private IEnumerator SearchCoRo(string keyword, SafeSearch safeSearch, int pageNo, string location, Action <ImageSearchResult> onCompleted)
        {
            string token = lastSearch.Value;

            if (lastSearch.Key != keyword)
            {
                // Debug.Log("Requesting new Token...");
                yield return(RequestToken(keyword, safeSearch, (t) => token = t));

                lastSearch = new KeyValuePair <string, string>(keyword, token);
            }

            // Debug.Log("SrcOb:" + currentToken);
            yield return(RequestSearchResult(keyword, token, safeSearch, pageNo, location, onCompleted));
        }
        public async Task <WebSearchResponse> SearchWeb(string query, SafeSearch safeSearch)
        {
            string endpoint = string.Format("{0}{1}&safeSearch={2}&count=5&mkt=en-US", "https://api.cognitive.microsoft.com/bing/v5.0/search?q=", query, safeSearch.ToString());

            try
            {
                WebSearchResponse response = await _webRequest.MakeRequest <WebSearchResponse>(endpoint);

                return(response);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }

            return(null);
        }
示例#8
0
        /// <summary>
        /// Safe search to string.
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public string SafeSearchToString(SafeSearch s)
        {
            switch (s)
            {
            case SafeSearch.active:
                return("active");

            case SafeSearch.moderate:
                return("moderate");

            case SafeSearch.off:
                return("off");

            default:
                return(string.Empty);
            }
        }
示例#9
0
        public string ImageSearch(string apiKey, string term, SafeSearch safeSearch)
        {
            var client = new RestClient("https://api.datamarket.azure.com/Bing/Search/v1/")
            {
                Authenticator = new HttpBasicAuthenticator(apiKey, apiKey)
            };

            var action = new RestRequest("Image", Method.GET);
            action.AddParameter("Query", "'" + term + "'")
                  .AddParameter("$format", "json")
                  .AddParameter("$top", "50")
                  .AddParameter("Adult", "'" + safeSearch + "'");

            var result = client.Execute(action);

            return result.Content;
        }
示例#10
0
        private IEnumerator RequestSearchResult(string keyword, string token, SafeSearch safeSearch, int pageNo, string location, Action <ImageSearchResult> callback)
        {
            pageNo = Mathf.Clamp(pageNo, 1, int.MaxValue);
            Dictionary <string, string> parameters = new Dictionary <string, string>()
            {
                { "l", location },
                { "o", "json" },
                { "q", keyword },
                { "vqd", token },
                { "f", ",,,,," },
                { "s", ((pageNo - 1) * 100).ToString() },
                { "p", safeSearch == SafeSearch.Off ? "-1" : "1" },
                { "v7exp", "a" },
            };
            string requestUrl = url
                                + "i.js?"
                                + string.Join("&", parameters.Select(kv => kv.Key + "=" + kv.Value));
            // Debug.Log(requestUrl);

            var request = UnityWebRequest.Get(requestUrl);

            foreach (var kv in headers)
            {
                // Debug.Log(kv.Key);
                request.SetRequestHeader(kv.Key, kv.Value);
            }
            var ao = request.SendWebRequest();

            yield return(new WaitUntil(() => ao.isDone));

            if (ao.webRequest.isNetworkError || ao.webRequest.isHttpError)
            {
                Debug.LogError("Searching Failed ! " + ao.webRequest.error);
                isLastRequestSuccessfull = false;
                callback.Invoke(null);
                yield break;
            }
            isLastRequestSuccessfull = true;

            // Debug.Log(ao.webRequest.downloadHandler.text);
            var result = JsonUtility.FromJson <ImageSearchResult>(ao.webRequest.downloadHandler.text);

            callback.Invoke(result);
        }
示例#11
0
        public static async Task <DdgResponse> SearchImagesAsync(string keywords, SafeSearch filter = SafeSearch.Moderate)
        {
            if (keywords.Length > MaxLength)
            {
                throw new ArgumentOutOfRangeException(nameof(keywords), $"The query cannot be larger than {MaxLength}.");
            }

            string token = await GetTokenAsync(keywords);

            string query = "?";

            query += "l=us-en";
            query += "&o=json";
            query += $"&q={Uri.EscapeDataString(keywords)}";
            query += $"&vqd={token}";
            query += "&f=,,,";
            query += $"&p={(filter == SafeSearch.Off ? "-1" : "1")}";
            //query += $"&p={(filter == SafeSearch.Strict || filter == SafeSearch.Moderate ? "1" : "-1")}";
            query += "&v7exp=a";

            string content;

            using (var requestMessage = GenerateRequestMessage(HttpMethod.Get, new Uri($"i.js{query}", UriKind.Relative)))
            {
                if (filter == SafeSearch.Strict)
                {
                    requestMessage.Headers.Add("cookie", "p=1");
                }
                else if (filter == SafeSearch.Off)
                {
                    requestMessage.Headers.Add("cookie", "p=-2");
                }
                var response = await _client.SendAsync(requestMessage);

                response.EnsureSuccessStatusCode();

                content = await response.Content.ReadAsStringAsync();
            }

            return(JsonConvert.DeserializeObject <DdgResponse>(content));
        }
示例#12
0
 /// <summary>
 /// Takes the various properties of this instance and adds them to a <see cref="Dictionary{K,V}"/> instanced passed in, ready for sending to Flickr.
 /// </summary>
 /// <param name="parameters">The <see cref="Dictionary{K,V}"/> to add the options to.</param>
 public void AddToDictionary(Dictionary <string, string> parameters)
 {
     if (!string.IsNullOrEmpty(UserId))
     {
         parameters.Add("user_id", UserId);
     }
     if (!string.IsNullOrEmpty(GroupId))
     {
         parameters.Add("group_id", GroupId);
     }
     if (!string.IsNullOrEmpty(Text))
     {
         parameters.Add("text", Text);
     }
     if (!string.IsNullOrEmpty(Tags))
     {
         parameters.Add("tags", Tags);
     }
     if (TagMode != TagMode.None)
     {
         parameters.Add("tag_mode", UtilityMethods.TagModeToString(TagMode));
     }
     if (!string.IsNullOrEmpty(MachineTags))
     {
         parameters.Add("machine_tags", MachineTags);
     }
     if (MachineTagMode != MachineTagMode.None)
     {
         parameters.Add("machine_tag_mode", UtilityMethods.MachineTagModeToString(MachineTagMode));
     }
     if (MinUploadDate != DateTime.MinValue)
     {
         parameters.Add("min_upload_date", UtilityMethods.DateToUnixTimestamp(MinUploadDate).ToString());
     }
     if (MaxUploadDate != DateTime.MinValue)
     {
         parameters.Add("max_upload_date", UtilityMethods.DateToUnixTimestamp(MaxUploadDate).ToString());
     }
     if (MinTakenDate != DateTime.MinValue)
     {
         parameters.Add("min_taken_date", UtilityMethods.DateToMySql(MinTakenDate));
     }
     if (MaxTakenDate != DateTime.MinValue)
     {
         parameters.Add("max_taken_date", UtilityMethods.DateToMySql(MaxTakenDate));
     }
     if (Licenses.Count != 0)
     {
         var licenseArray = new List <string>();
         foreach (var license in Licenses)
         {
             licenseArray.Add(license.ToString("d"));
         }
         parameters.Add("license", String.Join(",", licenseArray.ToArray()));
     }
     if (PerPage != 0)
     {
         parameters.Add("per_page", PerPage.ToString(System.Globalization.NumberFormatInfo.InvariantInfo));
     }
     if (Page != 0)
     {
         parameters.Add("page", Page.ToString(System.Globalization.NumberFormatInfo.InvariantInfo));
     }
     if (Extras != PhotoSearchExtras.None)
     {
         parameters.Add("extras", ExtrasString);
     }
     if (SortOrder != PhotoSearchSortOrder.None)
     {
         parameters.Add("sort", SortOrderString);
     }
     if (PrivacyFilter != PrivacyFilter.None)
     {
         parameters.Add("privacy_filter", PrivacyFilter.ToString("d"));
     }
     if (BoundaryBox != null && BoundaryBox.IsSet)
     {
         parameters.Add("bbox", BoundaryBox.ToString());
     }
     if (Accuracy != GeoAccuracy.None)
     {
         parameters.Add("accuracy", Accuracy.ToString("d"));
     }
     if (SafeSearch != SafetyLevel.None)
     {
         parameters.Add("safe_search", SafeSearch.ToString("d"));
     }
     if (ContentType != ContentTypeSearch.None)
     {
         parameters.Add("content_type", ContentType.ToString("d"));
     }
     if (HasGeo != null)
     {
         parameters.Add("has_geo", HasGeo.Value ? "1" : "0");
     }
     if (Latitude != null)
     {
         parameters.Add("lat", Latitude.Value.ToString(System.Globalization.NumberFormatInfo.InvariantInfo));
     }
     if (Longitude != null)
     {
         parameters.Add("lon", Longitude.Value.ToString(System.Globalization.NumberFormatInfo.InvariantInfo));
     }
     if (Radius != null)
     {
         parameters.Add("radius", Radius.Value.ToString("0.00000", System.Globalization.NumberFormatInfo.InvariantInfo));
     }
     if (RadiusUnits != RadiusUnit.None)
     {
         parameters.Add("radius_units", (RadiusUnits == RadiusUnit.Miles ? "mi" : "km"));
     }
     if (Contacts != ContactSearch.None)
     {
         parameters.Add("contacts", (Contacts == ContactSearch.AllContacts ? "all" : "ff"));
     }
     if (WoeId != null)
     {
         parameters.Add("woe_id", WoeId);
     }
     if (PlaceId != null)
     {
         parameters.Add("place_id", PlaceId);
     }
     if (IsCommons)
     {
         parameters.Add("is_commons", "1");
     }
     if (InGallery)
     {
         parameters.Add("in_gallery", "1");
     }
     if (IsGetty)
     {
         parameters.Add("is_getty", "1");
     }
     if (MediaType != MediaType.None)
     {
         parameters.Add("media", UtilityMethods.MediaTypeToString(MediaType));
     }
     if (GeoContext != GeoContext.NotDefined)
     {
         parameters.Add("geo_context", GeoContext.ToString("d"));
     }
     if (Faves)
     {
         parameters.Add("faves", "1");
     }
     if (PersonId != null)
     {
         parameters.Add("person_id", PersonId);
     }
     if (Camera != null)
     {
         parameters.Add("camera", Camera);
     }
     if (JumpTo != null)
     {
         parameters.Add("jump_to", JumpTo);
     }
 }
示例#13
0
        /// <summary>
        /// Search web pages with Bing service
        /// </summary>
        public async Task <BingWebSearchResult> SearchWebAsync(string query, int count = 10, int offset = 0, string market = "en-us", SafeSearch safeSearch = SafeSearch.Strict)
        {
            if (string.IsNullOrEmpty(query) == true)
            {
                return(default(BingWebSearchResult));
            }
            else if (query.Length > MAX_QUERY_LENGTH)
            {
                query = query.Substring(0, MAX_QUERY_LENGTH);
            }

            query = WebUtility.UrlEncode(query);

            // Get request uri
            string searchUrl  = string.Format(this.BaseServiceUrl + "search?q={0}&count={1}&offset={2}&mkt={3}&safesearch={4}", query, count, offset, market, safeSearch);
            Uri    requestUri = new Uri(searchUrl);

            // Get response
            BingWebSearchResult result = await HttpClientUtility.GetAsync <BingWebSearchResult>(requestUri, this.RequestHeaders);

            return(result);
        }
示例#14
0
 private void SearchFromInstance(string text, SafeSearch safeSearch, int pageNo, string location, Action <ImageSearchResult> onCompleted)
 {
     StartCoroutine(SearchCoRo(text, safeSearch, pageNo, location, onCompleted));
 }