Blogreader

0/5 (4 avis)

Snippet vu 6 503 fois - Téléchargée 25 fois

Contenu du snippet

Comme la plupart d'entre vous j'ai un blog, eh oui :) .
Le seul problème c'est que j'en voulais gratuit et sans pubs, j'ai trouvé pour cela un bon hébergeur sur http://www.zeblog.com.
Malheureusement la gratuité à un prix: le peu de fonctionnalités. Notamment une qui me désespérait jusqu'à ce que j'écrive ce programme: être avertit lorsque que j'ai de nouveaux commentaires afin de répondre à mes lecteurs le plus rapidement possible.
Comme vous l'avez donc deviné, j'ai écris un programme java qui se connecte à mon blog toutes les 15 minutes et me dit qui affiche une boite de dialogue si j'ai de nouveaux commentaires ;-) .
Enjoy!

Source / Exemple :


import javax.swing.*;
import java.net.*;
import java.io.*;
import java.util.*;
import java.text.*;

public class BlogReader extends Thread{
	private String fileName;
	private String blogUrl;
	private String lastCount;
	private String currentCount;
	private BufferedInputStream fileIn;
	private int sleepTimeMs;
	
	public BlogReader(String fileName, String blogUrl, int sleepTimeMin){
		this.fileName	= fileName;
		this.blogUrl	= blogUrl;
		this.sleepTimeMs	= sleepTimeMin*60*1000;
	}
	
	private boolean fileInRead(){
		// Saved count
		int car;
		StringBuffer buffer = new StringBuffer();
		try{
			fileIn = new BufferedInputStream(new FileInputStream(fileName));

			while((car = fileIn.read()) != -1){
				buffer.append((char)car);
			}
			
			lastCount = new String(buffer.toString());
			
			if(car == -1)
				fileIn.close();
			
			return true;
		}catch (FileNotFoundException ex){
			JOptionPane.showMessageDialog(null, "Error BlogReader: you have to create and initialize the file "+fileName+" manually !");
			System.exit(0);
			return false;
		}catch (IOException ex){
			System.out.println("Error BlogReader!");
			ex.printStackTrace();
			return false;
		}
	}
	
	private boolean saveNewInformations(String newCount){
		// Save new information
		OutputStream fileOut;
		byte [] bytes= newCount.getBytes();
		try{
			fileOut = new BufferedOutputStream(new FileOutputStream(fileName));
			for(int i = 0; i < newCount.length(); i++ )
				fileOut.write(bytes[i]);
			fileOut.flush();
			fileOut.close();
			return true;
		
		}catch (FileNotFoundException ex){
			JOptionPane.showMessageDialog(null, "Error BlogReader: cannot open the file "+fileName+" for writing !");
			return false;
		}catch (IOException ex){
			System.out.println("Error BlogReader!");
			ex.printStackTrace();
			
			return false;
		}
	}
		
	private void search (){
			if(!fileInRead())
				System.exit(0);
			
			System.out.println( DateFormat.getTimeInstance().format(new Date()));
			System.out.println("Last count was : "+lastCount+" comments");
		
			StringBuffer buffer = new StringBuffer();
			int car;
					
			// String
			String strToSearch = new String("commentaires</li>");
			String page = new String();
					
			try{
				// Connection
				URL myBlog = new URL(blogUrl);
				URLConnection connection = myBlog.openConnection();
				System.out.println("Connection...");
				// 	read the URL
				InputStream is = connection.getInputStream();
						
				while( (car = is.read()) != -1){
					//System.out.print((char)car);
					buffer.append((char)car);
				}
				page = buffer.toString();
				// Parse HTML
				if(page.contains(strToSearch)){
					int firstOccurrence = buffer.indexOf(strToSearch);
					buffer.delete(0, firstOccurrence-(lastCount.length()+1)); // +1 for the space
					firstOccurrence = buffer.indexOf(strToSearch);
					buffer.delete(strToSearch.length()+(lastCount.length()+1)-5, buffer.length());
					
					currentCount = new String(buffer.substring(0, buffer.indexOf(" ")));
					System.out.println("Current count is : "+currentCount+" comments");
					if(lastCount.compareTo(currentCount) != 0){
						System.out.println("You have new comment(s) on your blog !");
						JOptionPane.showMessageDialog(null, "BlogReader: you have new comment(s) on your blog!");
						saveNewInformations(currentCount);
						connection = null;
					}else{
						System.out.println("No new comment...");
					}
				}else{
					JOptionPane.showMessageDialog(null, "Error BlogReader: the doesn't contain strToSearch !");
				}
			}catch (MalformedURLException ex){
				JOptionPane.showMessageDialog(null, "Error BlogReader: Malformed URL!");
			}catch (IOException ex){
				System.out.println("Error BlogReader!");
				ex.printStackTrace();
			}
		}
	
	// run methode
	public void run() {
		while(true){
			search();
			try{
				sleep(sleepTimeMs);
			}catch (Exception e){
				e.printStackTrace();
			}
		}
		
	}
	
	// main
	static public void main(String [] arg){
		System.out.println("-----[BlogReader by psyphi]-----");
		System.out.println("--> http://psyphi.zeblog.com <--");
		System.out.println("--------------------------------");
		BlogReader br = new BlogReader("last_count", "http://psyphi.zeblog.com", 15);
		br.start();
	}
}
Ajouter un commentaire Commentaires
cs_phm Messages postés 49 Date d'inscription jeudi 17 janvier 2002 Statut Membre Dernière intervention 23 avril 2009
7 août 2007 à 17:27
super interessant ! Merci !
sur mon blog chaque article a un lien x commentaires
donc je boucle (tag = "commentaires")


pos = page.indexOf(tag);
if(pos > 0)
{
while (pos > 0)
{

str = page.substring(pos-7,pos-1);

pos2 = str.indexOf(">");
if (pos2 > 0)
{
str = str.substring(pos2+1,str.length());
nbtags=nbtags+(Integer.parseInt(str.trim()));
}
pos = page.indexOf(tag,(pos+1));
}
page = Integer.toString(nbtags);
page = "Resultat : " + page;
}
pukanvrou Messages postés 1 Date d'inscription vendredi 30 mars 2007 Statut Membre Dernière intervention 30 mars 2007
30 mars 2007 à 16:49
Sympa ce code: j'en ai dérivé un outil pour récupérer différentes infos sur des sites web ;-)

Merci !
psyphi Messages postés 51 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 12 août 2010
22 déc. 2006 à 20:22
Merci de ton soutient :).
Si tu as des optimisations je suis preneur ;) .
Twinuts Messages postés 5374 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 3 mars 2023 111
22 déc. 2006 à 15:35
Salut,

le code pourrait être optimisé (je reviendrai dessus plus tard)

sinon pour l'idée je la trouve simplement originale est ça devait être dit ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.