ブログ更新情報をはてなブックマーク・はてなハイク・twitterに投稿するjavaコード

ブログの更新情報をはてなブックマークはてなハイクtwitterに同時に投稿するjavaコードです。

使い方

アカウント情報の設定(NoticeBlogUpdate.properties)

このプログラムを使用するには、各サービスのアカウント情報をプロパティファイル「NoticeBlogUpdate.properties」に記述する必要があります。
プロパティファイルには以下の情報を設定します。

hatena_username
はてなのユーザ名
hatena_password
はてなのパスワード(はてなブックマークAPIの認証に使用)
hatena_address
はてなの投稿用アドレス(はてなハイクAPIの認証に使用)
twitter_username
twitterのユーザ名
twitter_password
twitterのパスワード

プロパティファイルは以下のように記述します。

hatena_username=nattou_curry_2
hatena_password=XXXXXXXXXX
hatena_address=YYYYYYYYYY
twitter_username=nattou_curry
twitter_password=ZZZZZZZZZ
起動方法

このプログラムを起動するには、javaコマンドの引数にNoticeBlogUpdateクラスを指定します。

java NoticeBlogUpdate

起動すると以下の画面が表示されます。

画面の操作

まず、画面上のテキストフィールドをそれぞれ入力します。
入力する内容は以下のとおりです。

タイトル
ブログの記事のタイトル
URL
ブログの記事のURL
ぶコメ
記事に対するブックマークコメント

画面には以下のように入力します。

次に、OKボタンを押します。
すると、以下のような確認ダイアログが表示されるので、投稿内容を確認してください。

投稿内容に問題がなければOKボタンを押します。
認証や投稿処理に問題がなければ、各サービスにブログの更新情報が通知されます。

ソースコード

NoticeBlogUpdateクラス

以下、NoticeBlogUpdateクラスのソースコードの全文です。

import java.io.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

/**
 * ブログ更新情報をはてなブックマーク・はてなハイク・twitterに投稿する。
 * @author nattou_curry
 */
public class NoticeBlogUpdate {

	private static JFrame frame;
	private static JTextField tf_title;
	private static JTextField tf_url;
	private static JTextField tf_comment;

	public static void main( String[] args ) {

		//////////////////////////////////////////////////////////////////
		// コンポーネントを作成する。
		//////////////////////////////////////////////////////////////////
		
		frame = new JFrame( "ブログ更新通知" );
		tf_title = new JTextField();
		tf_url = new JTextField();
		tf_comment = new JTextField();

		frame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );

		JButton bt_Ok = new JButton( "OK" );

		//////////////////////////////////////////////////////////////////
		// ボタンのイベントを設定する。
		//////////////////////////////////////////////////////////////////
		
		bt_Ok.addActionListener( new ActionListener() {
			public void actionPerformed( ActionEvent evt ) {
				// OKボタンが押された:
				okPressed();
			}
		} );

		//////////////////////////////////////////////////////////////////
		// フレームのレイアウトを行う。
		//////////////////////////////////////////////////////////////////
		
		JPanel panel1 = new JPanel();
		JPanel panel2 = new JPanel();

		frame.setLayout( new BorderLayout() );
		frame.add( panel1, BorderLayout.CENTER );
		frame.add( panel2, BorderLayout.SOUTH );

		panel1.setLayout( new GridLayout( 3, 2 ) );

		panel1.add( new JLabel( "タイトル: " ) );
		panel1.add( tf_title );
		panel1.add( new JLabel( "URL: " ) );
		panel1.add( tf_url );
		panel1.add( new JLabel( "ぶコメ: " ) );
		panel1.add( tf_comment );

		panel2.setLayout( new BorderLayout() );
		panel2.add( bt_Ok );

		//////////////////////////////////////////////////////////////////
		// フレームを表示する。
		//////////////////////////////////////////////////////////////////
		
		frame.setSize( 500, 200 );
		frame.setVisible( true );

	}

	/**
	 * OKボタンが押された場合の処理。
	 */
	private static void okPressed() {

		//////////////////////////////////////////////////////////////////
		// フレームから入力値を取得する。
		//////////////////////////////////////////////////////////////////
		
		// ブログのタイトル
		String title = tf_title.getText();
		// ブログのURL
		String url = tf_url.getText();
		// はてなブックマークのコメント
		String comment = tf_comment.getText();

		// ブログのタイトルが入力されていることを確認する。
		if ( title.length() == 0 ) {
			// 入力されていない:
			JOptionPane.showMessageDialog( frame, "ブログのタイトルが入力されていません。", "エラー", JOptionPane.ERROR_MESSAGE);
			return;
		}

		// ブログのURLが入力されていることを確認する。
		if ( url.length() == 0 ) {
			// 入力されていない:
			JOptionPane.showMessageDialog( frame, "ブログのURLが入力されていません。", "エラー", JOptionPane.ERROR_MESSAGE);
			return;
		}

		// はてなハイク・twitterのメッセージ
		String message = title + " " + url;
		// はてなハイクのキーワード
		String keyword = "ダイアリー書いたよ!";

		//////////////////////////////////////////////////////////////////
		// 処理の継続を確認する。
		//////////////////////////////////////////////////////////////////
		
		String confirmMessage = "以下の内容で投稿しますがよろしいですか?\n"
			+ "\n"
			+ "・はてなブックマーク: URL=[" + url + "], コメント=[" + comment + "]\n"
			+ "・はてなハイク: メッセージ=[" + message + "], キーワード=[" + keyword + "]\n"
			+ "・twitter: メッセージ=[" + message + "]";
		
		Object[] options = { "OK", "CANCEL" };
		int result = JOptionPane.showConfirmDialog( frame, confirmMessage, "確認", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE );
		if ( result != JOptionPane.OK_OPTION ) {
			return;
		}

		//////////////////////////////////////////////////////////////////
		// プロパティファイルから設定を読み込む。
		//////////////////////////////////////////////////////////////////
		
		Properties prop = new Properties();

		InputStream in = null;
		try {
			// プロパティファイルを開く。
			in = new FileInputStream( "NoticeBlogUpdate.properties" );

			// プロパティファイルの内容をプロパティセットに読み込む。
			prop.load( in );

		} catch ( IOException e ) {
			// 入出力エラー:
			e.printStackTrace();
			return;

		} finally {
			// プロパティファイルを閉じる。
			try {
				in.close();
			} catch ( IOException e ) {
				// 何もしない
			}
		}
		
		// はてなのユーザ名
		final String hatena_username = prop.getProperty( "hatena_username" );
		// はてなのパスワード
		final String hatena_password = prop.getProperty( "hatena_password" );
		// はてなのアドレス
		final String hatena_address = prop.getProperty( "hatena_address" );
		// twitterのユーザ名
		final String twitter_username = prop.getProperty( "twitter_username" );
		// twitterのパスワード
		final String twitter_password = prop.getProperty( "twitter_password" );

		//////////////////////////////////////////////////////////////////
		// ブログ更新情報をはてなブックマーク・はてなハイク・twitterに投稿する。
		//////////////////////////////////////////////////////////////////
		
		// はてなブックマーク
		HatenaBookmarkAPIAccess.postPost( hatena_username, hatena_password, url, comment );
		// はてなハイク
		HatenaHaikuAPIAccess.postStatusesUpdate( hatena_username, hatena_address, message, keyword );
		// twitter
		TwitterAPIAccess.postStatusesUpdate( twitter_username, twitter_password, message );
	}
}
依存するクラスのソースコード

NoticeBlogUpdateクラスは、各サービスのAPIに接続するために以下のクラスを使用します。