Filtrowanie strony www

0

Cześć, piszę o poradę w sprawie javy.

Jak technicznie widzicie działanie takiej aplikacji:

Aplikacja musi wczytywać sobie słownik wyrazów (plik txt) i wczytywać treść strony www (jak pobrać treść strony do javy). Filtrować treść strony i jak na stronie wystąpi słowo ze słownika to je zaznacza albo podmienia na ** i wyświetla potem zmienioną stronę już po filtrowaniu.
Czy technologicznie jest to do ogarnięcia i jak z poziomem trudności ?

0

Bierzesz jakiegoś HTTP Clienta, możesz se sam napisać (http://netty.io/) - filtrujesz cały ten html, potem wypluwasz do klienta, kwestia, co zrobić z CSSem i JavaScriptem (możesz też zaciągać i wypluwać dalej)

*http://stackoverflow.com/questions/1359689/how-to-send-http-request-in-java
*http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/

0

Może jakiś XSLT dawno nie korzystałem więc nie wiem czy dałoby radę :P. A pobranie zawartości strony to byle co łączy się ze serwerem i pozwala na odbiór requesta. Nie ma co przekombinowywać może sockety.

0

Nie ma co przekombinowywać może sockety.

a HTTP call to co to jest ?

0

@maryiusz A skąd ty nagle wyleciałeś z HTTP Call'em ? Wiadomo, że klienty http są pisane na bazie socketów. Piszę, że nie potrzebuje pobierania klienta dla wysłania prostego requesta

0

Piszę, że nie potrzebuje pobierania klienta dla wysłania prostego requesta

Dlaczego ? przecież to jest wygodne, LOOOOOOOOOL

0

Nie piszę, że nie jest wygodne, tylko ze nie potrzebuje. Czy ty czytasz ze zrozumieniem. Moim zdaniem, jeżeli chce pobrać zawartość strony, nie musi używać zaraz zaciągać Klienta HTTP, którego funkcjonalność (API) jest dużo dużo większa. Wolę napisać 4-5 linijek dla socketów, niż dołączać kolejnego .jar dla jego jednej funcji

0

Nie piszę, że nie jest wygodne, tylko ze nie potrzebuje. Czy ty czytasz ze zrozumieniem. Moim zdaniem, jeżeli chce pobrać zawartość strony, nie musi używać zaraz zaciągać Klienta HTTP, którego funkcjonalność (API) jest dużo dużo większa. Wolę napisać 4-5 linijek dla socketów, niż dołączać kolejnego .jar dla jego jednej funcji

To nie będzie 4-5 linijek. Radzę unikać wymyślania koła na nowo, ten jeden jar to nie jest duży koszt. Chyba, że chcesz się przećwiczyć w http, wtedy jak najbardziej ma to sens.

0

Samą treść strony myślę, że uda się wyciągnąć przez HttpURLConnection i dalej response, pytanie jak potem wygenerować tą stronę na nowo tak, żeby wyglądała oryginalnie tylko ze zmienioną treścią ?

0

To nie będzie 4-5 linijek. Radzę unikać wymyślania koła na nowo, ten jeden jar to nie jest duży koszt. Chyba, że chcesz się przećwiczyć w http, wtedy jak najbardziej ma to sens.

 
         Socket s = new Socket(InetAddress.getByName("stackoverflow.com"), 80);
            PrintWriter pw = new PrintWriter(s.getOutputStream());
            pw.println("GET / HTTP/1.1");
            pw.println("Host: stackoverflow.com");
            pw.println("");
            pw.flush();
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String t;
            while((t = br.readLine()) != null) System.out.println(t);
            br.close();

Proszę znalezienie tego w internecie i przekopiowanie zajęło mi 15 sekund. Nie potrzebny jest żadeń HTTP Client, którego zaimportowanie bez narzędzi takich jak maven gradle ivy zajmuje więcej i jest zbędne. Wystarczy przekopiować do osobnej funkcji i śmiga. Jeżeli autor wątku, będzie chciał coś więcej niż odpowiedzi na zwykłe żądania GET: na przykład logowanie to może faktycznie będzie potrzebował HTTP Clienta, ale wtedy nie pisał by tylko o pobraniu strony ale obsłudze różnych żądań HTTP, logowaniu obsłudze ciasteczek

0

Żeby zmienić treść źródła strony w przeglądarce musisz się do niej dobrać przez przeglądarke, wtedy zwykłym HTTP Clientem/socketami do tego się nie dobierzesz. Selenium pozwala na dobranie się do source code... chyba sprawdź to

0

wtedy zwykłym HTTP Clientem/socketami do tego się nie dobierzesz. Selenium pozwala na dobranie się do source code... chyba sprawdź to

user image
Dobra można by tu obrażać, ale @furious programming, @Shalom nie zrobie tego, doceńcie :D

Samą treść strony myślę, że uda się wyciągnąć przez HttpURLConnection i dalej response, pytanie jak potem wygenerować tą stronę na nowo tak, żeby wyglądała oryginalnie tylko ze zmienioną treścią

Zależy co Ty chcesz wgl zrobić, chcesz te stronę cenzurować i móc odpalić lokalnie ? w takim razie najbardziej prymitywnie możesz to zrobić jakoś tam


		StringBuilder result = new StringBuilder();
		URL url = new URL("http://www.interiatrisjdfosdijf.pl");
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setRequestMethod("GET");
		BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
		String line;
		while ((line = rd.readLine()) != null) {
			result.append(line);
		}
		rd.close();

		System.out.println(result.toString());

		Path path = Paths.get("index.html");
		try (BufferedWriter writer = Files.newBufferedWriter(path)) {
			writer.write(result.toString());
		}

teraz masz lokalnie kopiuj wklej źródeł strony i możesz se "kliknąć", problem jest taki że ty lokalnie nie masz CSS'sow ani JavaScriptu, musisz teraz polatać i pozbierać, pozapisywać to lokalnie i powinno Ci to działać,
np: potrzebujesz zapisać lokalnie http://sgs.iplsc.com/style-1649925d8cae5fe5737dccfab34c6e2f.css - zautomatyzuj
Nie oczekuj oczywiście w 100% funkcjonalnej strony.

W samej javie możesz też emulować przeglądarkę - http://docs.oracle.com/javafx/2/webview/jfxpub-webview.htm

0

Nie, to nie jest to o co prosił autor. Autor użył sformułowania "treść strony", a ty w jej całej nie pobierasz.
To w źródle strony nie ma treści strony ;d ?

Zależy co Ty chcesz wgl zrobić, chcesz te stronę cenzurować i móc odpalić lokalnie ? w takim razie najbardziej prymitywnie możesz to zrobić jakoś tam
StringBuilder result = new StringBuilder();
URL url = new URL("http://www.interiatrisjdfosdijf.pl");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
result.append(line);
}
rd.close();

    System.out.println(result.toString());

    Path path = Paths.get("index.html");
    try (BufferedWriter writer = Files.newBufferedWriter(path)) {
        writer.write(result.toString());
    }

teraz masz lokalnie kopiuj wklej źródeł strony i możesz se "kliknąć", problem jest taki że ty lokalnie nie masz CSS'sow ani JavaScriptu, musisz teraz polatać i pozbierać, pozapisywać to lokalnie i powinno Ci to działać,
np: potrzebujesz zapisać lokalnie http://sgs.iplsc.com/style-1649925d8cae5fe5737dccfab34c6e2f.css - zautomatyzuj
Nie oczekuj oczywiście w 100% funkcjonalnej strony.

W samej javie możesz też emulować przeglądarkę - http://docs.oracle.com/javafx/2/webview/jfxpub-webview.htm

O jaki kozak :D Obraża w internetach wstawiając głupie dziecinne i nerdowskie memy, a nie wie jeszcze co autor miał na myśli. Myślę, że autor chce zrobić prosty tłumacz strony bez jej przeładowywania, na razie tak to zrozumiałem. Ty jednak każesz mu odpalić nowy plik w nowym oknie, i mówisz, że nie będzie miał zasobów serwera (Rozwiązanie ? - Selenium). Widocznie ty nie wiesz, kiedy użyć gotowe biblioteki a robić coś niskopoziomowo, wytłumacz mu teraz jak dostać się do przeglądarki za pomocą reverse-engineeringu. Później idź na google i poczytaj o Selenium(powiedziałem, że może on posiadać taką opcję, więc sprawdź to dla mnie.) a na końcu się wypowiadaj.

Jeżeli autorowi zależy tylko na otworzeniu nowej karty bez zasobów serwera niech wykorzysta to twoje śmieszne rozwiązanie, ale dobrze to nie będzie wyglądać jak co przejście strony będzie otwierała mu się nowa karta albo będzie tworzył własną przeglądarke (btw wiesz co znaczy w ogóle słowo emulacja, nie czytałem całej dokumentacji co dałeś ale WebEngine webEngine = browser.getEngine(); nie wygląda na emulator).

0

Oczywiście jakimś cudem to może być emulator, wtedy zwracam honor, chociaż ludzie twojego pokroju, którzy muszą być nękani przez rówieśników, i kozaczą w necie pewnie dużo jej nie mają, ale słówko engine mówi coś innego.

@ŁF oczywiście masz rację, dopiero zauważyłem co pisałeś, lecz istnieją narzędzia potrafiące przekonwertować HTML -> XHTML/XML

0

@Jaca777 powtórze pytanie czy

To w źródle strony nie ma treści strony ;d ?
bo odpowiedź
Źródło może odwoływać się do treści znajdującej się poza nim
Raczej nie jest odpowiedzią na te pytanie

0

Skoro źródło strony odwołuje się do treści strony i do czegoś co jest treścia ale nie jest treścia według ciebie to znaczy, że nie ma w nim treści strony? Chyba mieszasz, coś...

0

Według ciebie co css javascript to treść strony :D ? Chyba inaczej rozumiemy to pojęcie, treść to ta rzecz którą chce on przetłumaczyć, cześć która każdy nieprogramista/nieinformatyk zrozumie, jakiej tam treści mu brakuje twoje css javascripty to dla mnie źródło strony.

0

MA PŁYW NA TREŚĆ, WŁAŚNIE ! Głupie rozwijanie menu, to funkcjonalność dodająca nową treść. Autor pytał w pytaniu o treść, a ty mówisz o pobraniu funkcjonalności strony w postaci skryptów dla ujawnienia INNEJ treści na stronie. Pierwsze pytanie autora brzmiało o pobraniu treści, żeby ją przetłumaczyć, to moje rozwiązanie jest najszybszym rozwiązaniem tego problemu, funkcjonalność to inna sprawa.

0

Dla mnie na początku autor chciał pobrać -> treść <- strony zawierającej artykuł po angielsku i przetłumaczyć na polski i wyświetlić obojętnie, gdzie. Później doszły dodatkowe warunki, które może oznaczają, że treść ma być tłumaczona na tej samej karcie w przeglądarce, bez przeładowywania i jeśli ty tak myślałeś od początku powinieneś wiedzieć, że twoje rozwiązanie nie ma prawa działania.

0

Nie no panowie spokojnie, to jest nieskomplikowany projekt.

Wyjaśniając żeby było wiadomo dokładnie o co chodzi.

  1. Pobieramy treść strony www
  2. Ładujemy jakiś słownik słów do programu (zwykły plik txt)
  3. Słowa które występują w słowniku i na stronie możemy zamienić powiedzmy na **** albo dowolne cuś
  4. Wyświetlamy tak przefiltrowaną (zmienioną stronę) stronę w przeglądarce

punkt 1 mamy opracowny
punkt 2 i 3 to nie jest trudna kwestia
natomiast nie bardzo wiem jak się zabrać za punkt 4 czy tu z pomocą może przyjść JavaServer Page ?, jest możliwość wyświetlenia strony w przeglądarce ?

0

Jeżeli chcesz, zrobić ten tłumacz bez przeładowywania strony na tej samej karcie to: http://stackoverflow.com/questions/36286102/how-to-change-source-code-of-page-using-selenium-and-java nie wygląda na pewno to na fajne rozwiązanie, ale działające. Nie znam innego.
Do tego poleciłbym jeszcze jakąś konwersje HTML na XML i XSLT

Jeżeli chcesz, tworzyć nową kartę i zbierać przy tym zasoby serwera (bo teraz rozumiem, że potrzebujesz też funkcjonalności ?) użyj rozwiązania @maryiusz (btw. widać, że koleś przegrał życie, wracać na forum po banie mimo, że nikt go nie chce, myśli że jego dziecinne teksty są fajne a on sam jest cool, ale to zwykła światowa pi**a w internecie nikt nie zauważy :( - syptom nie posiadania kolegów i odczuwania samotności #jestemPsychologiem) PS. Embedded Browser to nie emulator

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