//Tak, wiem - jest tego dużo do czytania. Jednak jeśli ktoś podpowie mi coś w którejś z kwestii, być może pozna moją wdzięczność.
Witam.
Zaczynam w chwili obecnej tworzyć program (póki co - jego koncepcje), który pomógłby firmom pośredniczącym i wszystkim innym, które muszą dodawać każdego dnia setki ogłoszeń do różnych portali ogłoszeniowych (chodzi tutaj o przypadki, gdy jedno ogłoszenie trzeba dodać do wielu portali - tylko w tym przypadku ma to sens). Mam kilka problemów koncepcyjnych - ale też dotyczących technologii wykonania (stąd temat w tym dziale). Do tej pory ustaliłem, że za interfejs użytkownika i zarządzanie lokalną bazą ogłoszeń (ale może jeszcze za coś) będzie odpowiadał Qt. Każde ogłoszenie, które chciałoby się wystawić, trzeba stworzyć i zapisać w lokalnej bazie (opartej na plikach, chyba .csv) - następnie można wybrać z listy dostępnych w programie portali ogłoszeniowych te, na których dane ogłoszenie chcemy opublikować - potem klik i rozpoczyna się strumieniowa publikacja. To ogólny zarys.
Teraz - jak miałoby wyglądać dodawania ogłoszenia - zakładając, że mamy wszystkie potrzebne dane do wypełnienia danego formularza ogłoszeniowego i znamy strukturę tego formularza (atrybuty "name" jego pól) myślałem nad dwoma rozwiązaniami:
- bliblioteka libcurl, komunikacja przez protokół HTTP, przesyłanie formularzy metodą POST,
- skorzystanie z komponentu QWebView w Qt, załadowanie do niego podstrony z formularzem i - z wykorzystaniem javascriptu (może z jQuery) - automatyczne "rzeczywiste" (widome) wypełnienie wszystkich pól formularza i ewentualne "naciśnięcie" przycisku submitującego (samo wciśnięcie można by było pozostawić użytkownikowi, miałby wtedy możliwość sprawdzenia, czy wszystko dobrze się wypełniło),
Wydaje mi się, że pierwsze rozwiązanie jest trochę prostsze w realizacji, ale nie wiem, które ma więcej wad.
Problemy w pierwszym:
- zabezpieczenie captchą (w niektórych serwisach) - wysłanie formularza metodą POST nie przyniesie skutku jeśli kod z captchy nie zostanie poprawnie przepisany. Wymyśliłem teoretyczne obejście tego - można byłoby (ale czy na pewno?) otwierać okienko z pobraną z formularza captchą i kazać przepisać to użytkownikowi - i dołączyć to do stringa przesyłanego metodą POST, w przypadku drugiego rozwiązania problemu nie ma, bo formularz jest wizualnie użytkownikowi otwierany i może on przed submitem captchę przepisać,
- tokeny sesji - nie jestem pewien, ale wydaje mi się, że w niektórych formularzach w polach typu "hidden" są tokeny danej sesji (chodzi chyba tylko o formularze w serwisach z obowiązkową rejestracją) - i (chyba) formularz nie zostanie zaakceptowany z niewłaściwym tokenem - ale taki token chyba też można byłoby pobrać ze struktury formularza (?),
Problemy w drugim:
- mniejsza automatyzacja dodawania ogłoszeń, mniej zaoszczędzonego czasu użytkownika (a przecież o to chodzi w tym programie) i chyba więcej zabawy z JavaScriptem niż z komendami w libcurl,
Problemy wspólne obu rozwiązań:
- kompletność danych - założyliśmy wcześniej, że przy wypełnianiu/konstruowaniu komunikatu metody POST mamy wszystkie potrzebne do wypełnienia formularza dane - jak jednak je uzyskać? Trafiają się serwisy, które wymagają tylko tytułu, treści ogłoszenia i danych kontaktowych, a z drugiej strony kolosy, pytające o wiele różnych szczegółów. Jak po stworzeniu przez użytkownika jednego ogłoszenia w bazie dodać to ogłoszenie do tak różnych serwisów, korzystając z tak różnych formularzy? Wypadałoby chyba wziąć sumę zbiorów wszystkich możliwych pól formularzy ze wszystkich obsługiwanych przez program serwisów i kazać użytkownikowi wypełnić każde z nich. Potem program korzystając z tych danych w prostym formularzu skorzystałby tylko z kilku, bardziej skomplikowany z większej ilości - ogólnie każdy pobierałby informacje, których potrzebuje,
- lista serwisów ogłoszeniowych - nie sądzę, by dało się zaimplementować jakąś w miarę uniwersalną "inteligencję", która na podstawie wyrażeń regularnych czy czegoś innego rozpoznawałaby to, jakie dane w jakie pola wpisać. W związku z tym każdy formularz w każdym serwisie obsługiwanym przez program musiałby być jakoś opisany (głównie chodzi o typy pól formularza i ich atrybuty "name"). Może format xml byłby odpowiedni do ich opisu (mam z nim małe doświadczenie)? A może macie lepszy pomysł? Jako że chciałbym, by lista serwisów była rozszerzana i by opis ich struktury był aktualny, postanowiłem, że będą one pobierane z zewnętrznego serwera MySQL (by uniknąć konieczności aktualizacji programu przy dodaniu nowego portalu). I tu jeszcze jedno, ważne pytanie - czy jeśli umieszczę dane logowania do bazy danych z listą serwisów w kodzie programu (hardcode) i będę w programie łączył się z wspomnianym serwerem, istnieje możliwość "wysniffowania" danych logowania i zniszczenia z ich wykorzystaniem zawartości mojej bazy danych?
- rejestracja - niektóre z serwisów ogłoszeniowych wymagają rejestracji przed dodaniem ogłoszenia - w ich przypadku muszę chyba po prostu od użytkowników wymagać danych logowania (rejestrację przeprowadzą już na własną rękę) i przed przejściem do wypełniania formularza zalogować się w serwisie - dobrze myślę?,
- weryfikacja dodania - po dodaniu ogłoszenia przez program do danego serwisu fajnie byłoby móc wyświetlić komunikat "ogłoszenie zostało dodane pomyślnie do ogłoszenia-xxx.pl" - jak jednak się dowiedzieć czy faktycznie tak jest? Obecnie nie mam pomysłu na przynajmniej częściowo uniwersalne sprawdzanie czy ogłoszenie faktycznie zostało dodane (inna kwestia, że w większości przypadków przed dodaniem następuje jeszcze etap moderacji),
Jeśli dotrwałeś do tego miejsca, będę Ci wdzięczny za cokolwiek, co może mi pomóc. Naprowadzenie, podsunięcie pomysłu, skorygowanie błędu rozumowania (lub braku wiedzy), odpowiedź na zadane w poście pytanie/wątpliwość. Dzięki ;).