public async Task StringAsync([Remainder] string searchterm) { //Setup and send search request var request = new ImageSearchRequest(); request.Query = searchterm; request.Key = Environment.GetEnvironmentVariable("API_KEY"); request.SearchEngineId = Environment.GetEnvironmentVariable("SEARCH_ENGINE_ID"); //Gets the search response - contains info about search var response = await GoogleSearch.ImageSearch.QueryAsync(request); //Pick a random search result var items = response.Items.ToArray(); var random = new Random(); var item = items[random.Next(0, items.Length)]; //Create an embed using that image url var builder = new EmbedBuilder(); builder.WithTitle("Stringsearch!"); builder.WithImageUrl(item.Link); builder.WithColor(3447003); //Send message await Context.Channel.SendMessageAsync("", false, builder.Build()); Console.WriteLine("Stringsearch! - " + searchterm + " " + item.Link); //Do an image classification prediction for stringsearch images as well CommandHandler.MakePrediction(item.Link, Context); GC.Collect(); //Call the prediction method }
public async Task Execute(SocketMessage message) { try { string[] args = message.Content.Split(' '); if (args.Length == 0) { return; } string search = string.Join(' ', args.Skip(1)); if (string.IsNullOrWhiteSpace(search)) { return; } string token = await File.ReadAllTextAsync("google-token.txt").ConfigureAwait(false); var request = new ImageSearchRequest() { Query = search, Key = token, SearchEngineId = "005052579021300564037:vtmq_gkuoog" }; var response = await GoogleSearch.ImageSearch.QueryAsync(request).ConfigureAwait(false); RootObject result = JsonConvert.DeserializeObject <RootObject>(response.RawJson); if (result.items.Count == 0) { await message.Channel.SendMessageAsync("Beep bop, sorry could not find anything for your request"); return; } using (var webclient = new WebClient()) { var item = result.items[0]; string path = Path.GetTempPath(); string filename = Path.GetFileName(item.link.Split('?')[0]); string filepath = Path.Combine(path, filename); await webclient.DownloadFileTaskAsync(item.link, filepath).ConfigureAwait(false); await message.Channel.SendFileAsync(filepath).ConfigureAwait(false); File.Delete(filepath); } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public void GetQueryStringParametersTest() { var request = new ImageSearchRequest { Key = "abc", SearchEngineId = "abc", Query = "abc" }; Assert.DoesNotThrow(() => request.GetQueryStringParameters()); }
public void ImageSearchWhenKeyIsNullTest() { var request = new ImageSearchRequest { Key = null }; var exception = Assert.Throws <ArgumentException>(() => GoogleSearch.ImageSearch.Query(request)); Assert.AreEqual(exception.Message, "Key is required"); }
public void ImageSearchWhenQueryIsNullTest() { var request = new ImageSearchRequest { Key = this.ApiKey, SearchEngineId = this.SearchEngineId, Query = null }; var exception = Assert.Throws <ArgumentException>(() => GoogleSearch.ImageSearch.Query(request)); Assert.AreEqual(exception.Message, "Query is required."); }
public void ConstructorDefaultTest() { var request = new ImageSearchRequest(); Assert.IsTrue(request.PrettyPrint); Assert.AreEqual(request.Alt, AltType.Json); Assert.IsNotNull(request.ImageOptions); Assert.IsNull(request.ImageOptions.ImageSize); Assert.IsNull(request.ImageOptions.ImageType); Assert.IsNull(request.ImageOptions.ImageColorType); Assert.IsNull(request.ImageOptions.ImageDominantColor); }
public void GetUriTest() { var request = new ImageSearchRequest { Key = "abc", SearchEngineId = "abc", Query = "abc" }; var uri = request.GetUri(); Assert.IsNotNull(uri); Assert.AreEqual($"/customsearch/v1?key={request.Key}&q={request.Query}&cx={request.SearchEngineId}&alt={request.Alt.ToString().ToLower()}&prettyPrint={request.PrettyPrint.ToString().ToLower()}&userIp={request.UserIp}"aUser={request.QuotaUser}&c2coff=1&fileType={string.Join(",", request.Options.FileTypes)}&filter=0&hl={request.Options.InterfaceLanguage.ToHl()}&num={request.Options.Number}&rights={string.Join(",", request.Options.Rights)}&safe={request.Options.SafetyLevel.ToString().ToLower()}&searchType=image&start={request.Options.StartIndex.ToString()}", uri.PathAndQuery); }
/// <summary> /// Perform a bing image search and return the top image. /// </summary> /// <param name="celebrity">The celebrity to search for.</param> /// <returns>The description of the celebrity.</returns> private async Task <Image> SearchForImage(string searchText) { var client = new ImageSearchClient(SEARCH_KEY); client.Url = SEARCH_API; // force use of v7 api var request = new ImageSearchRequest() { Query = searchText }; var response = await client.GetImagesAsync(request); return(response.Images.FirstOrDefault()); }
public void GetQueryStringParametersWhenKeyIsStringEmptyTest() { var request = new ImageSearchRequest { Key = string.Empty }; var exception = Assert.Throws <ArgumentException>(() => { var parameters = request.GetQueryStringParameters(); Assert.IsNull(parameters); }); Assert.AreEqual(exception.Message, "Key is required"); }
public void ImageSearchAsyncTest() { var request = new ImageSearchRequest { Key = this.ApiKey, SearchEngineId = this.SearchEngineId, Query = "google" }; var response = GoogleSearch.ImageSearch.QueryAsync(request).Result; Assert.IsNotNull(response); Assert.IsNotEmpty(response.Items); Assert.AreEqual(response.Kind, "customsearch#search"); Assert.AreEqual(response.Status, Status.Ok); }
public void GetQueryStringParametersWhenQueryIsNullTest() { var request = new ImageSearchRequest { Key = "abc", Query = null }; var exception = Assert.Throws <ArgumentException>(() => { var parameters = request.GetQueryStringParameters(); Assert.IsNull(parameters); }); Assert.AreEqual(exception.Message, "Query is required"); }
public void GetImagesTest() { var request = new ImageSearchRequest(); request.Query = "cats"; request.Count = 10; request.Offset = 0; request.Market = "en-US"; request.SafeSearch = SafeSearch.Moderate; var client = new ImageSearchClient(this.apiKey); var response = client.GetImages(request); Assert.IsTrue(response.Images.Count > 0); }
public void ImageSearchWhenKeyIsNullTest() { var request = new ImageSearchRequest { Key = null }; var exception = Assert.Throws <AggregateException>(() => GoogleSearch.ImageSearch.QueryAsync(request).Wait()); Assert.IsNotNull(exception); var innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(typeof(GoogleApiException), innerException.GetType()); Assert.AreEqual(innerException.Message, "Key is required"); }
public void GetQueryStringParametersWhenSearchEngineIdIsNullTest() { var request = new ImageSearchRequest { Key = this.ApiKey, Query = "google", SearchEngineId = null }; var exception = Assert.Throws <ArgumentException>(() => { var parameters = request.GetQueryStringParameters(); Assert.IsNull(parameters); }); Assert.AreEqual(exception.Message, "SearchEngineId is required"); }
public void ImageSearchWhenQueryIsNullTest() { var request = new ImageSearchRequest { Key = this.ApiKey, Query = null }; var exception = Assert.Throws <AggregateException>(() => GoogleSearch.ImageSearch.Query(request)); Assert.IsNotNull(exception); Assert.AreEqual("One or more errors occurred.", exception.Message); var innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(typeof(GoogleApiException), innerException.GetType()); Assert.AreEqual(innerException.Message, "Query is required"); }
public void ImageSearchWhenAsyncAndCancelledTest() { var request = new ImageSearchRequest { Key = this.ApiKey, SearchEngineId = this.SearchEngineId, Query = "google" }; var cancellationTokenSource = new CancellationTokenSource(); var task = GoogleSearch.ImageSearch.QueryAsync(request, cancellationTokenSource.Token); cancellationTokenSource.Cancel(); var exception = Assert.Throws <OperationCanceledException>(() => task.Wait(cancellationTokenSource.Token)); Assert.IsNotNull(exception); Assert.AreEqual(exception.Message, "The operation was canceled."); }
public void ImageSearchTest() { var request = new ImageSearchRequest { Key = this.ApiKey, SearchEngineId = this.SearchEngineId, Query = "google" }; var response = GoogleSearch.ImageSearch.Query(request); Assert.IsNotNull(response); Assert.IsNotEmpty(response.Items); Assert.AreEqual(response.Kind, "customsearch#search"); Assert.AreEqual(response.Status, Status.Ok); Assert.IsNotNull(response.Url); Assert.AreEqual(response.Url.Type, "application/json"); Assert.AreEqual(response.Url.Template, "https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json"); Assert.IsNotNull(response.Search); Assert.Greater(response.Search.SearchTime, 0.00); Assert.IsNotEmpty(response.Search.SearchTimeFormatted); Assert.Greater(response.Search.TotalResults, 0); Assert.IsNotEmpty(response.Search.TotalResultsFormatted); var context = response.Context; Assert.IsNotNull(context); Assert.AreEqual(context.Title, "Google Web"); var items = response.Items; Assert.IsNotNull(items); var item = response.Items.FirstOrDefault(); Assert.IsNotNull(item); Assert.IsNotNull(item.Link); Assert.IsNotNull(item.Title); Assert.IsNotNull(item.DisplayLink); }
public void GetQueryStringParametersWhenOptionsNumberIsGreaterThanNineTest() { var request = new ImageSearchRequest { Key = "abc", Query = "google", SearchEngineId = "abc", Options = { Number = 11 } }; var exception = Assert.Throws <InvalidOperationException>(() => { var parameters = request.GetQueryStringParameters(); Assert.IsNull(parameters); }); Assert.AreEqual(exception.Message, "Number must be between 1 and 10"); }
public async Task StringAsync() { //Setup and send search request ImageSearchRequest request = new ImageSearchRequest(); Random random = new Random(); //Nice request.Options.StartIndex = random.Next(0, 190); //Max limit may change and result in 400 Bad Request responses request.Query = "Ball of String"; request.Key = Environment.GetEnvironmentVariable("API_KEY"); request.SearchEngineId = Environment.GetEnvironmentVariable("SEARCH_ENGINE_ID"); //Gets the search response - contains info about search BaseSearchResponse response; try { response = await GoogleSearch.ImageSearch.QueryAsync(request); } catch (Exception e) { Console.WriteLine("Error: " + e.Message); return; } //Pick a random search result var items = response.Items.ToArray(); var index = random.Next(0, items.Length); var item = items[index]; //Create an embed using that image url EmbedBuilder builder = new EmbedBuilder(); builder.WithTitle("String!"); builder.WithImageUrl(item.Link); builder.WithColor(3447003); //Send message await Context.Channel.SendMessageAsync("", false, builder.Build()); Console.WriteLine("String! - " + item.Link + " " + (response.Query.StartIndex + index)); }
public void GetQueryStringParametersWhenSafetyLevelInterfaceLanguageIsNotSupportedTest() { var request = new ImageSearchRequest { Key = "abc", Query = "google", SearchEngineId = "abc", Options = { SafetyLevel = SafetyLevel.Medium, InterfaceLanguage = Language.Afrikaans } }; var exception = Assert.Throws <InvalidOperationException>(() => { var parameters = request.GetQueryStringParameters(); Assert.IsNull(parameters); }); Assert.AreEqual(exception.Message, $"SafetyLevel is not allowed for specified InterfaceLanguage: {request.Options.InterfaceLanguage}"); }
public void ImageSearchWhenAsyncAndTimeoutTest() { var request = new ImageSearchRequest { Key = this.ApiKey, SearchEngineId = this.SearchEngineId, Query = "google" }; var exception = Assert.Throws <AggregateException>(() => { var result = GoogleSearch.ImageSearch.QueryAsync(request, TimeSpan.FromMilliseconds(1)).Result; Assert.IsNull(result); }); Assert.IsNotNull(exception); Assert.AreEqual(exception.Message, "One or more errors occurred."); var innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.GetType(), typeof(TaskCanceledException)); Assert.AreEqual(innerException.Message, "A task was canceled."); }
/// <summary> /// Main entry point for ImageVerifier application /// </summary> /// <param name="args">Represents path to tab delimited file or a single ImageID GUID</param> /// **TBD** Needs to be refactored to several classes. Option to compare images for a single imageId /// static void Main(string[] args) { List <string> imageIDs = new List <string>(); string line = null; //using (StreamReader file = new StreamReader(@"C:\Users\V-saeld\Desktop\Image\ImageID.txt")) using (StreamReader file = new StreamReader(@"..\..\999.txt")) { while ((line = file.ReadLine()) != null) { char[] delimiters = new char[] { '\t' }; string[] parts = line.Split(delimiters, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < parts.Length; i++) { imageIDs.Add(parts[i]); } } file.Close(); } string results = @"C:\Users\v-saeld\Desktop\results.log"; using (StreamWriter logWriter = new StreamWriter(results)) { foreach (string imageID in imageIDs) { logWriter.WriteLine("ImageID: {0}", imageID); Console.WriteLine("ImageID: {0}", imageID); CatalogServices cs = Constants.Proxy; ImageSearchRequest imageSearchRequest = new ImageSearchRequest(); List <ImageVerifier.ImInstDisplay> list = new List <ImageVerifier.ImInstDisplay>(); Dictionary <Guid, string> dictUrl = new Dictionary <Guid, string>(); ImageVerifier.MVAProxy.Image image = null; ImageVerifier.ImInstDisplay im = new ImageVerifier.ImInstDisplay(); im.ImageID = new Guid(imageID); image = cs.GetImage(im.ImageID); int OriginalImageSizeID = 0; int ThumbnailImageSizeID = 4; List <ImageVerifier.MVAProxy.ImageSize> imageSizes = ImageVerifier.MVAProxy.ImageSize.Get(); ImageVerifier.ImInstDisplay imInstDisplay = new ImageVerifier.ImInstDisplay(); int originalImageFileWidth = 0, originalImageFileHeight = 0, originalImageFileSize = 0; string originalImageFileExtension = string.Empty; bool originalFileAvailable = false; bool originalFileinSanAvailable = true; foreach (ImageInstance iminst in image.Instances) { if (iminst.ImageSizeId == OriginalImageSizeID) { im.OriginalFileGuid = iminst.Id; ImageFileHandler.GetImageFileProperty(iminst.Id, out originalImageFileWidth, out originalImageFileHeight, out originalImageFileSize, out originalImageFileExtension); if (originalImageFileWidth == 0 && originalImageFileHeight == 0 && originalImageFileSize == 0) { Console.WriteLine("ImageID: {0} - There is no image in San folder-{1}.", imageID, originalImageFileExtension); logWriter.WriteLine("ImageID: {0} - There is no image in San folder-{1}.", imageID, originalImageFileExtension); originalFileinSanAvailable = false; break; } else { originalFileAvailable = true; continue; } } else if (iminst.ImageSizeId == ThumbnailImageSizeID) { continue; } else { imInstDisplay.LiveURL = iminst.FileUrl; dictUrl.Add(iminst.Id, imInstDisplay.LiveURL.ToString()); } } Hashtable propImageList = new Hashtable(); foreach (ImageInstance iminst in image.Instances) { if (!originalFileinSanAvailable) { break; } string sourceImageFileExtension = string.Empty; int sourceImageFileWidth = 0, sourceImageFileHeight = 0, sourceImageFileSize = 0; int thumbNailImageSizeID = 4; if (!originalFileAvailable) { logWriter.WriteLine("ImageID: {0}-There is no original image.", imageID); Console.WriteLine("ImageID: {0}-There is no original image.", imageID); break; } ImageFileHandler.GetImageFileProperty(iminst.Id, out sourceImageFileWidth, out sourceImageFileHeight, out sourceImageFileSize, out sourceImageFileExtension); if (iminst.ImageSizeId == OriginalImageSizeID || iminst.ImageSizeId == thumbNailImageSizeID) { continue; } ImageSize imSize1 = new ImageSize(); imSize1.Id = iminst.ImageSizeId; imSize1.Width = sourceImageFileWidth; imSize1.Height = sourceImageFileHeight; propImageList.Add(iminst.Id, imSize1); } if (originalFileAvailable && originalFileinSanAvailable) { Dictionary <Guid, System.Drawing.Image> dictDestImages = ImageFileHandler.PropImage(image, propImageList, im.OriginalFileGuid); Dictionary <Guid, System.Drawing.Image> dictImages = new Dictionary <Guid, System.Drawing.Image>(); foreach (var pair in dictUrl) { System.Drawing.Image ima = ImageUtil.DownloadImage(pair.Value); dictImages.Add(pair.Key, ima); } foreach (KeyValuePair <Guid, System.Drawing.Image> Origkvp in dictImages) { foreach (KeyValuePair <Guid, System.Drawing.Image> kvp in dictDestImages) { if (Origkvp.Key == kvp.Key) { bool IsImageSame = ImageUtil.DiffImages(kvp.Value, Origkvp.Value); if (!IsImageSame) { logWriter.WriteLine("InstanceID: {0} Different image.", kvp.Key); Console.WriteLine("InstanceID: {0} Different image.", kvp.Key); } else { logWriter.WriteLine("InstanceID: {0} Same image.", kvp.Key); Console.WriteLine("InstanceID: {0} Same image.", kvp.Key); } } } } } } Console.ReadLine(); } }
public void ValidateTest_QueryNotSpecified() { var request = new ImageSearchRequest(); request.Validate(); }