Blogreader

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 235 fois - Téléchargée 23 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();
	}
}

A voir également

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
-
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
-
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
-
Merci de ton soutient :).
Si tu as des optimisations je suis preneur ;) .
Twinuts
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
88 -
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.