Flash Flash Revolution

Flash Flash Revolution (http://www.flashflashrevolution.com/vbz/index.php)
-   Technology (http://www.flashflashrevolution.com/vbz/forumdisplay.php?f=74)
-   -   [JAVA] Site Search Help (http://www.flashflashrevolution.com/vbz/showthread.php?t=123722)

SKG_Scintill 05-1-2012 03:59 AM

[JAVA] Site Search Help
 
I was checking if I could make a program that searches for a certain word on a site. It that word was on it, it would do a system.out.println(); if it wasn't, it would simulate pressing f5 and loop the class.

Here's my code:
N.B: There's two classes, so you can't just copy paste.

Code:

//Tabswitch class is so it doesn't loop alt+tab later on

import java.awt.*;
import java.awt.event.*;

public class Tabswitch {
        public static void main(String[] args) throws Exception{
                Robot r = new Robot();
                r.keyPress(KeyEvent.VK_ALT);
                r.keyPress(KeyEvent.VK_TAB);
                r.delay(100);
                r.keyRelease(KeyEvent.VK_ALT);
                r.keyRelease(KeyEvent.VK_TAB);
                URLReader a = new URLReader();
        }
}

//URLReader class is where my question lies

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class URLReader{
        public URLReader() throws Exception{
                URL site = new URL("http://kaction.com/badfanfiction/");
                BufferedReader in = new BufferedReader(
                                new InputStreamReader(site.openStream()));
               
                String inputLine;
                while((inputLine = in.readLine()) != null)
                        if(inputLine.contains("the"))
                                System.out.println(inputLine);
                        else{
                                Robot s = new Robot();
                                s.delay(2000);
                                s.keyPress(KeyEvent.VK_F5);
                                s.keyRelease(KeyEvent.VK_F5);
                                s.delay(2000);
                                URLReader a = new URLReader();
                        }
        }
}

My issue lies in the last "if"-statement. It doesn't print inputLine, it always goes to the "else"-statement.
I was trying to make a .containsnot() of some sorts so it could be a "while"-loop, but to no avail...

Any ideas how to fix this?


P.S: I used badfanfiction so my printline wouldn't be massive.

UserNameGoesHere 05-1-2012 04:55 AM

Re: [JAVA] Site Search Help
 
The problem is you have an infinite loop of sorts. If the very first line has input but doesn't contain "the" it immediately loads the page again. The recursively-spawned URLReader then does the same. Ad-infinitum.

Do you just want it to read the entire page, catch all lines which have "the", print out only those lines, and only AFTER that reload the page if there weren't any? Then rewrite your while like this
Code:

boolean found = false;
while((inputLine = in.readLine()) != null){
        if(inputLine.contains("the")){
                found = true;
                System.out.println(inputLine);
        }
}
if(!found){
        Robot s = new Robot();
        s.delay(2000);
        s.keyPress(KeyEvent.VK_F5);
        s.keyRelease(KeyEvent.VK_F5);
        s.delay(2000);
        URLReader a = new URLReader();
}

Is there a reason you're using a recursive solution, by the way? A nonrecursive one would be less resource-hungry. Would you prefer a nonrecursive one?

Also, other than serving up delays when relevant (and those are relevant), what is your Robot doing? I don't think it's doing what you may think it's doing. In particular your Robot is in no way connected with your URL stream and if it is (as I am guessing/assuming) meant for scripting Firefox or another browser in the background, its scripting is independent of everything else this program is trying to do and is unrelated.

To me, the Robot looks useless and I'd remove it unless you can integrate it better with what you're actually trying to do. If it's not needed for anything else, replace the Robot delay calls with Thread.sleep calls instead.

SKG_Scintill 05-1-2012 05:15 AM

Re: [JAVA] Site Search Help
 
I think it's got to do with the fact that I've only had 3 months of programming class so far ;)

SKG_Scintill 05-1-2012 05:23 AM

Re: [JAVA] Site Search Help
 
It works when the word is on the first opened page, but when I tried to look for "Final Fantasy" it didn't println() and continued looping.

The robot is to simulate button presses, I couldn't find a refresh action in the java.io.* or java.net.* so this was my way round.
The delays are mostly so I can follow its progress, when it works I make it quicker

UserNameGoesHere 05-1-2012 05:30 AM

Re: [JAVA] Site Search Help
 
Leave the delays in there. The delays are useful so you don't hammer the website. (At least that's why I assumed you had them).

Well as-is the Robot is scripting some button presses but those have nothing whatsoever to do with the loading, reloading, or reading of that particular website. It really has nothing else to do with what you're trying to do (that I can see) and your program doesn't need it to automate either. I'd remove it. (replace the delay calls with Thread.sleep calls)

SKG_Scintill 05-1-2012 05:33 AM

Re: [JAVA] Site Search Help
 
I don't know if you have looked at the site itself, but it randomly generates a couple of words. It's to keep refreshing and looking if it randomly generated a given word, such as "Final Fantasy".
I know it's really long-winded to do it this way, but it's what I can understand with my current knowledge.

UserNameGoesHere 05-1-2012 05:40 AM

Re: [JAVA] Site Search Help
 
Well yes I assume you wanted to stop once one page had your chosen words on it. That's why it stops after one page has the words. Did you want it to continue refreshing/printing indefinitely even after it found a page that had the words on it???

SKG_Scintill 05-1-2012 05:41 AM

Re: [JAVA] Site Search Help
 
No, but it's doing that right now, after your adjustments :P

If it's there on the first try, it prints. If it comes up on later tries, it continues looping. I don't want that xD

(Looking for things I may have overlooked in your code)

UserNameGoesHere 05-1-2012 05:46 AM

Re: [JAVA] Site Search Help
 
Okay so state specifically, and clearly, in as precise of detail as you can, exactly what your program is supposed to do? That's the first step.

I can read the code and see what it actually does. I can try to infer or guess what you wanted it to do. But if my guess as to what you wanted is wrong, well my solution will implement my guess lol.

The clearer you explain it the better I can help you. :)

SKG_Scintill 05-1-2012 05:54 AM

Re: [JAVA] Site Search Help
 
The program is supposed to do this:

1. Switch from my programming software Eclipse to the site itself by simulating alt+tab.
2. Read the text on the given site.
3. Determine if a given word occurs in the text. (or given words occur)
4. If it occurs in the text, it's supposed to stop searching so I can read it. (The println() isn't necessary). The program ends here if this happens.
5. If it doesn't occur in the text, it's supposed to refresh the page. (Which I do by simulating the f5-button)
6. Go back to point 2.

UserNameGoesHere 05-1-2012 05:57 AM

Re: [JAVA] Site Search Help
 
So you want it to stop the very FIRST line it finds? If it finds ANY lines with desired text, print only the first of such then terminate program?

SKG_Scintill 05-1-2012 05:58 AM

Re: [JAVA] Site Search Help
 
yes

UserNameGoesHere 05-1-2012 05:59 AM

Re: [JAVA] Site Search Help
 
put a break after the System.out.println and you get that functionality then.

SKG_Scintill 05-1-2012 06:01 AM

Re: [JAVA] Site Search Help
 
Still continues searching after personally seeing "Final" come by O.o

Code:

public class URLReader{
        public URLReader() throws Exception{
                URL site = new URL("http://kaction.com/badfanfiction/");
                BufferedReader in = new BufferedReader(
                                new InputStreamReader(site.openStream()));
               
                String inputLine;
                boolean found = false;
                while((inputLine = in.readLine()) != null){
                        if(inputLine.contains("Final")){
                                found = true;
                                System.out.println(inputLine);
                                break;
                        }
                }
        if(!found){
                        Robot s = new Robot();
                        s.delay(2000);
                        s.keyPress(KeyEvent.VK_F5);
                        s.keyRelease(KeyEvent.VK_F5);
                        s.delay(2000);
                        URLReader a = new URLReader();
                }
        }
}


UserNameGoesHere 05-1-2012 06:04 AM

Re: [JAVA] Site Search Help
 
That's because what you're seeing is what your Robot is doing (refreshing page in your browser) but what your program is searching is independent of that. That's what I was trying to get at earlier. ;-)

So it's really hitting up the website twice on each round. Once, to search it for what you want. Then a second time when your browser refreshes the page. The page you see and the page it searches are not the same or in any way connected.

SKG_Scintill 05-1-2012 06:14 AM

Re: [JAVA] Site Search Help
 
So I get the robot being a motorized stubborn entity, what should I replace it with?
I replaced the delay calls with Thread.sleep(), but what about the keypresses?

UserNameGoesHere 05-1-2012 06:19 AM

Re: [JAVA] Site Search Help
 
It depends what you want your program to do.

Do you just want it to find this information and inform you of it? Then you do nothing with the keypresses. It already is working in the background -- you just don't get visual confirmation. If you want you could save the .html file for later perusal or save data to a text file of some sort.

Do you want it to integrate with Firefox, automating Firefox itself? Unless Firefox has a command-line way to tell it "Open this within a new tab but within the currently-open window and not a new window" it's going to be hard.

Edit -- figured out how to tell Firefox exactly that from command line.
Code:

firefox -new-tab http://blahblah
so this should be doable. Hold your horses for a bit then. ;)

SKG_Scintill 05-1-2012 06:24 AM

Re: [JAVA] Site Search Help
 
I want the visual confirmation tbh :P
Just want it to refresh until it finds the word, stay on that page and refresh no longer.

UserNameGoesHere 05-1-2012 07:07 AM

Re: [JAVA] Site Search Help
 
Code:

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class URLReader{
        public static void main(String[] args) throws Exception{
                URLReader a = new URLReader();
        }
       
        public URLReader() throws Exception{
                URL site = new URL("http://kaction.com/badfanfiction/");
                BufferedReader in = new BufferedReader(
                                new InputStreamReader(site.openStream()));
                BufferedWriter out = new BufferedWriter(
                                new OutputStreamWriter(
                                new FileOutputStream("savedsite.html")));
               
                String inputLine;
                boolean found = false;
                while((inputLine = in.readLine()) != null){
                        out.write(inputLine, 0, inputLine.length());
                        if(inputLine.contains("the")){
                                if(!found){
                                        System.out.println(inputLine);
                                        found = true;
                                }
                        }
                }
                out.close();
                if(found){
                        Runtime.getRuntime().exec("firefox -new-tab savedsite.html");
                }
                else{
                        Thread.sleep(2000);
                        Thread.sleep(2000);
                        in.close();
                        URLReader b = new URLReader();
                }
        }
}

Does this do what you want?

SKG_Scintill 05-1-2012 07:44 AM

Re: [JAVA] Site Search Help
 
Well... it doesn't do anything now


All times are GMT -5. The time now is 11:48 AM.

Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright FlashFlashRevolution