トラックバックしてみる

戻る
トラックバックツール

::::::::::::::
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 );

    }
}

戻る inserted by FC2 system