Wątek zablokowany 2016-11-03 15:27 przez Patryk27.

Program do automatycznego dodawania ogłoszeń w serwisach ogłoszeniowych - koncepcje i technologia

0

//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 ;).

0
anonymouse napisał(a)
  • 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),

Przy dużej ilości serwisów będzie to upierdliwe. Co prawda i tak wygodniejsze niż ręczne wklepywanie, ale jak znam userów, to szybko wrócą do starej metody jeśli nie będzie to bardziej zautomatyzowane.

anonymouse napisał(a)
  • 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 (?),

Jeśli chodzi Ci o sesję HTTP, to tokeny są przesyłane albo ciasteczkami (najczęściej), albo w query stringu GETa/payloadzie POSTa. Musisz umieć obsłużyć oba przypadki. Ciasteczkami AFAIR cURL sam zarządza, ale musisz to sprawdzić w dokumentacji.

anonymouse napisał(a)
  • 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,

Ten problem ma tylko jedno rozwiązanie (to, które przedstawiłeś), nie ma zatem chyba sensu się nad nim rozwodzić.

anonymouse napisał(a)
  • 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ć.

Z podstawowymi danymi nie powinno być kłopotu. "Imię" tu to "Imię" tam. To samo z nazwiskiem, PESELem, telefonem itd. Jest jednak sporo parametrów, które nie są wspólne dla wszystkich serwisów, zatem i tak będziesz musiał każdy formularz obsługiwać oddzielnie.

anonymouse napisał(a)

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?

I tak i nie. To zależy od tego jak to zrobisz. Jeśli połączenie będzie kryte SSLem, wysniffować będzie trudniej. Jeśli user będzie miał prawa do zapisu w bazie (w tym przypadku mieć nie powinien), to będzie mógł sobie robić różne ciekawe rzeczy itp. Ogólnie raczej nie wystawia się publicznie bazy danych do takich rzeczy. Proponuję zrobić to klasycznie, czyli na serwerze, na podstawie danych z bazy (czy czegokolwiek) generować pliki (binarne, XML, JSON, TXT, CSV, nawet BMP jeśli lubisz wyzwania), które będzie pobierał klient po HTTP w ramach aktualizacji.

anonymouse napisał(a)
  • 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ę?,

Dobrze myślisz.

anonymouse napisał(a)
  • 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),

Musisz parsować zwrotny HTML.

anonymouse napisał(a)

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 ;).

Ja mam pomysł. Najpierw sprawdź czy jakieś portale tego typu nie wystawiają swojego API i zrób to zgodnie ze sztuką. Potem dopiero baw się w udawanie przeglądarki WWW z doczepionym userem.

0

Chętnie zakupimy taki skrypt, jak będzie działał poprawnie.... Właśnie czegoś takiego szukamy. [email protected]

0
anonymouse napisał(a)
  • 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)

Jeśli już używać bibliotek Qt to można skorzystać z QNetworkAccessManager do obsługi HTTP.

anonymouse napisał(a)

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?

Tak jak już wcześniej pisał ktoś, jeśli SSL to nie "wysniffuje". Jednakże jeśli login i hasło będzie umieszczone bezpośrednio w binarce programu jako ciągi znaków to wystarczy, że użytkownik podglądnie kod binarny i już będzie znał dane do logowania. Oczywiście można zastosować szyfrowanie tych danych w binarce jednak zawsze może ktoś odszyfrować (cracker).

Generalnie to jest ciekawy pomysł, jednak czasami wystarczy, że dany portal ogłoszeniowy zmieni małą rzecz na stronie i trzeba ponownie robić aktualizację. W dodatku chyba istnieją już gotowe rozwiązania np. http://ogloszenia.automatogloszenia.pl

0

Rejestracja do strony z ogłoszeniami powinna odbywać się możliwie automatycznie i najlepiej z IP osoby u której jest program (żeby portal z ogłoszeniami nie zablokował dostępu twojej usłudze po banie na IP) do tego jest problem z przyjściem e-maila potwierdzającego rejestrację tu postawił bym serwer z kontami e-mail aby program sam to sprawdzał a nie kazał użytkownikowi przechodzić przez proces "uwierzytelniania" adresu e-mail. Ogólnie najlepiej gdyby cały proces odbywał się na maszynie klienta a nie na ogólnym hoście którego łatwo można zbanować - a tam przechowywać jedynie "sposób" wysyłania ogłoszeń do poszczególnych stron i stan usługi - tu jeszcze problem z próbami obchodzenia programu ze względu na to, że wszystko byłoby po stronie klienta. Z captcha można dać jakiś program partnerski jak sobie wyklikasz captche to możesz sobie wypłacić gotówkę albo wykupić "przepisywacza" który zrobi to za ciebie.

0

Witam, Czy udalo się skończyć ten program?
Zająłem się tym tematem i chciałbym zająć się jego promocją. Póki co wstępne rozmowy z programistami.
Proszę o kontakt na [email protected]

0

Witam

Jeśli ktoś posiada taki program to proszę o kontakt [email protected]

0

Witam, czy istnieje program do automatycznego dodawania ogłoszeń.

Poszukuję programu, który by dodawał treść - ogloszenia

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1