/// <remarks/> public void doSearchAsync(string sessionhandle, SearchOptType searchquery, object userState) { if ((this.doSearchOperationCompleted == null)) { this.doSearchOperationCompleted = new System.Threading.SendOrPostCallback(this.OndoSearchOperationCompleted); } this.InvokeAsync("doSearch", new object[] { sessionhandle, searchquery}, this.doSearchOperationCompleted, userState); }
/// <remarks/> public System.IAsyncResult BegindoSearch(string sessionhandle, SearchOptType searchquery, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("doSearch", new object[] { sessionhandle, searchquery}, callback, asyncState); }
/// <remarks/> public void doSearchAsync(string sessionhandle, SearchOptType searchquery) { this.doSearchAsync(sessionhandle, searchquery, null); }
/// <summary> /// Wyszukiwanie /// </summary> /// <param name="searchQuery">Szukane słowa</param> /// <param name="category">Kategoria, w której będzie wykonywane przeszukiwanie</param> /// <param name="price">Szukana cena</param> public List<SearchResponseType> Search(string searchQuery, string category, decimal price) { //TODO: check connection open state (on every search) //TODO: check session key (or refresh it by default, by every 30 minutes) if (_asvc.State != CommunicationState.Opened) _asvc.Open(); //może być, że więcej kategorii spełnia wymogi wyszukiwania //dlatego niżej jest wprowadzone wyszukiwanie dla większej ilości //przeszukiwanych kategorii var foundCategories = _categories.Where(x => ReplacePolishChars(x.catname.ToLower()).Contains(ReplacePolishChars(category.ToLower()))); var foundAuctions = new List<SearchResponseType>(); foreach (var foundCategory in foundCategories) { for (var i = 0; i < 50; i++) //doSearch zwraca tylko i wyłącznie 50 pierwszych wyników, przypuszczamy, że //maksymalnie będzie 50 "stron" zwracanych { SearchResponseType[] tempFoundAuctions; var allegroSearchQuery = new SearchOptType { searchcategory = foundCategory.catid, searchstring = searchQuery, searchpriceto = (float) price, searchoffset = i, searchlimit = 100, //maksymalna ilość pobieranych danych (od 0 do 100) searchorder = 4, //sortowanie wyniku po cenie przedmiotu searchordertype = 0 //sortowanie rosnąco (domyślnie, ale wolę wprowadzić) }; var countFoundAuctions = _asvc.doSearch(out _tempCountFeaturedAuctions, out tempFoundAuctions, out _tempExcludedWords, _sessionKey, allegroSearchQuery); foundAuctions.AddRange(tempFoundAuctions); if (countFoundAuctions < 50) //jeżeli aukcji będzie mniej niż 50, przerywa działanie { break; } } Thread.Sleep(new Random().Next(100, 600)); //usypianie wyszukiwania (w celu uniknięcia blokady) } return foundAuctions; }