トラックバックしてみる
戻る
::::::::::::::
TrackBackPinger.bat
::::::::::::::
java TrackBackPinger
::::::::::::::
Pinger.java
::::::::::::::
import java.io.*;
import java.util.*;
import java.net.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.tree.*;
/**
$Id: trackbackpinger.html,v 1.1 2009/06/22 16:12:31 kishi Exp kishi $
@author KISHI Yasuhiro
*/
public class Pinger implements Runnable {
private HashMap hm;
private JTextArea status; // 結果表示用のテキストエリア -- かなり力ずく(−−;
public Pinger( HashMap hm, JTextArea status ) {
this.hm = hm;
this.status = status;
}
public void run() {
String result = null;
try {
result = doPing();
} catch ( Exception e ) {
e.printStackTrace();
}
System.out.println( "完了しました!" );
setStatus( result );
}
public synchronized void setStatus( String result ) {
status.setText( result );
}
/** PING処理実行 */
public String doPing() throws Exception {
StringBuffer sb = new StringBuffer();
try {
// PING先のURLを指定
URL ping_url = new URL( ( String ) hm.get( "ping_url" ) );
// 送信電文の作成
String title = ( String ) hm.get( "title" );
String blog_name = ( String ) hm.get( "blog_name" );
String url = ( String ) hm.get( "url" );
String excerpt = ( String ) hm.get( "excerpt" );
StringBuffer poststr = new StringBuffer();
poststr.append( "title=" + URLEncoder.encode( title, "UTF8" ) );
poststr.append( "&blog_name=" + URLEncoder.encode( blog_name, "UTF8" ) );
poststr.append( "&url=" + URLEncoder.encode( url, "UTF8" ) );
poststr.append( "&excerpt=" + URLEncoder.encode( excerpt, "UTF8" ) );
// URLにアクセス
URLConnection conn = ping_url.openConnection();
conn.setDoOutput( true );
// HTTPヘッダにUSER-AGENTを追加 -- IEにしてしまいます
conn.setRequestProperty( "User-Agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)" );
PrintStream ps =
new PrintStream( conn.getOutputStream() );
ps.print( poststr );
ps.flush();
ps.close();
ps = null;
BufferedReader reader =
new BufferedReader(
new InputStreamReader(
conn.getInputStream() ) );
// 返信電文を読む
System.out.println( "--- RESPONSE ---" );
String line;
while ( ( line = reader.readLine() ) != null ) {
System.out.println( line );
sb.append( line + "\n" );
}
reader.close();
reader = null;
return sb.toString();
} catch ( Exception ex ) {
throw( ex );
}
}
}
::::::::::::::
TrackBackPinger.java
::::::::::::::
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.tree.*;
/**
<pre>
$Id: trackbackpinger.html,v 1.1 2009/06/22 16:12:31 kishi Exp kishi $
非常にシンプルなBLOGに対してのトラックバッキングツール(改良版)
</pre>
@author KISHI Yasuhiro
*/
public class TrackBackPinger extends JFrame implements ActionListener {
private JTextField title;
private JTextField blogName;
private JTextField url;
private JTextField pingUrl;
private JTextArea excerpt;
private JTextArea status;
private final Color STATUS_BG_COLOR = new Color( 0, 127, 255 );
private JPanel commandPanel;
public static void main( String[] args ) {
TrackBackPinger viewer = new TrackBackPinger();
/* 終了処理を追加 */
viewer.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
System.exit( 0 );
}
}
);
/** サイズと位置を指定 */
//viewer.setBounds( 0, 0, 200, 400 );
/* 実際に表示する */
viewer.setTitle( "超簡単トラックバックPINGツール♪ $Revision: 1.1 $" );
viewer.setVisible( true );
viewer.pack();
}
private void configureCommandPanel() {
/** 送信ボタン */
JButton submitButton = new JButton( "Submit" );
submitButton.addActionListener( this );
submitButton.setActionCommand( "Submit" );
/** クリアボタン */
JButton clearButton = new JButton( "Clear" );
clearButton.addActionListener( this );
clearButton.setActionCommand( "Clear" );
/** ステータス表示エリア */
status = new JTextArea( );
status.setWrapStyleWord( true );
status.setLineWrap( true );
status.setEditable( false ); // 編集不可
status.setForeground( Color.white );
status.setBackground( STATUS_BG_COLOR );
JScrollPane statusScrollPane = new JScrollPane( status );
statusScrollPane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS );
statusScrollPane.setPreferredSize( new Dimension( 400, 200 ) );
/** コマンドパネル */
commandPanel = new JPanel();
commandPanel.add( submitButton );
commandPanel.add( clearButton );
commandPanel.add( statusScrollPane );
}
public TrackBackPinger() {
// コマンドパネルを設定
configureCommandPanel();
/** タイトル */
JLabel titleLabel = new JLabel( "タイトル", JLabel.RIGHT );
title = new JTextField( 50 );
/** BLOG名 */
JLabel blogNameLabel = new JLabel( "BLOG名", JLabel.RIGHT );
blogName = new JTextField( 50 );
/** URL */
JLabel urlLabel = new JLabel( "URL", JLabel.RIGHT );
url = new JTextField( 50 );
/** 抄録 */
JLabel excerptLabel = new JLabel( "抄録", JLabel.RIGHT );
excerpt = new JTextArea( );
excerpt.setWrapStyleWord( true );
excerpt.setLineWrap( true );
JScrollPane excerptScrollPane = new JScrollPane( excerpt );
excerptScrollPane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS );
excerptScrollPane.setPreferredSize( new Dimension( 500, 250 ) );
/** ピング先URL */
JLabel pingUrlLabel = new JLabel( "PING先URL", JLabel.RIGHT );
pingUrl = new JTextField( 50 );
// 入力エリアに各コンポーネントを配置
Container content = this.getContentPane();
GridBagLayout layout = new GridBagLayout();
content.setLayout( layout );
GridBagConstraints constraints = new GridBagConstraints();
constraints.insets = new Insets( 5, 5, 5, 5 );
// タイトル
constraints.gridy = 0;
layout.setConstraints( titleLabel, constraints );
content.add( titleLabel );
content.add( title );
// BLOG名
constraints.gridy ++;
constraints.gridx = 0;
layout.setConstraints( blogNameLabel, constraints );
content.add( blogNameLabel );
constraints.gridx = 1;
layout.setConstraints( blogName, constraints );
content.add( blogName );
// URL
constraints.gridy ++;
constraints.gridx = 0;
layout.setConstraints( urlLabel, constraints );
content.add( urlLabel );
constraints.gridx = 1;
layout.setConstraints( url, constraints );
content.add( url );
// 抄録
constraints.gridy ++;
constraints.gridx = 0;
layout.setConstraints( excerptLabel, constraints );
content.add( excerptLabel );
constraints.gridx = 1;
constraints.anchor = GridBagConstraints.WEST; // 左寄せ
layout.setConstraints( excerptScrollPane, constraints );
content.add( excerptScrollPane );
// PING先URL
constraints.gridy ++;
constraints.gridx = 0;
layout.setConstraints( pingUrlLabel, constraints );
content.add( pingUrlLabel );
constraints.gridx = 1;
layout.setConstraints( pingUrl, constraints );
content.add( pingUrl );
//---------------------------------------
// コマンドパネル(送信ボタン)
//---------------------------------------
constraints.gridy ++;
constraints.gridx = 0;
constraints.gridwidth = 2;
constraints.anchor = GridBagConstraints.CENTER; // センタリング
layout.setConstraints( commandPanel, constraints );
content.add( commandPanel );
}
public void actionPerformed( ActionEvent e ) {
String action = e.getActionCommand();
if ( action.equals( "Submit" ) ) {
/* 送信 */
System.out.println( "送信ボタンがクリックされました!" );
System.out.println( "title: " + title.getText() );
System.out.println( "blogName: " + blogName.getText() );
System.out.println( "url: " + url.getText() );
System.out.println( "excerpt: " + excerpt.getText() );
System.out.println( "pingUrl: " + pingUrl.getText() );
HashMap hm = new HashMap();
if ( title.getText().length() == 0 ) {
showErrorMessage( "タイトルが未入力です" );
return ;
}
hm.put( "title", title.getText() );
if ( blogName.getText().length() == 0 ) {
showErrorMessage( "BLOG名が未入力です" );
return ;
}
hm.put( "blog_name", blogName.getText() );
if ( url.getText().length() == 0 ) {
showErrorMessage( "URLが未入力です" );
return ;
}
hm.put( "url", url.getText() );
if ( excerpt.getText().length() == 0 ) {
showErrorMessage( "抄録が未入力です" );
return ;
}
hm.put( "excerpt", excerpt.getText() );
if ( pingUrl.getText().length() == 0 ) {
showErrorMessage( "PING先URLが未入力です" );
return ;
}
hm.put( "ping_url", pingUrl.getText() );
/** PING実行 */
status.setText( "トラックバックPINGを実行中です・・・" );
status.setBackground( Color.black );
try {
// ランナブルクラスのインスタンス化
// 処理結果をテキストエリアに表示させるためにstatus(テキストフィールドの参照を渡す)
Pinger pinger = new Pinger( hm, status );
// スレッドのインスタンス化
Thread thread = new Thread( pinger );
// スレッド開始
thread.start();
status.setForeground( Color.white );
status.setBackground( STATUS_BG_COLOR );
status.setText( "処理を開始しました!" );
} catch ( Exception exception ) {
status.setForeground( Color.red );
status.setText( "例外が発生しました。" + "\n" + exception.getMessage() );
}
}
if ( action.equals( "Clear" ) ) {
title.setText( "" );
blogName.setText( "" );
url.setText( "" );
pingUrl.setText( "" );
excerpt.setText( "" );
}
}
private void showErrorMessage( String message ) {
System.err.println( message );
status.setText( message );
}
}
戻る