作業部屋の使い方を試しています。
(empty log message)
| @@ -0,0 +1,121 @@ | ||
| 1 | +/* | |
| 2 | + * To change this license header, choose License Headers in Project Properties. | |
| 3 | + * To change this template file, choose Tools | Templates | |
| 4 | + * and open the template in the editor. | |
| 5 | + */ | |
| 6 | + | |
| 7 | +package Form; | |
| 8 | + | |
| 9 | +import Lib.SearchData; | |
| 10 | +import java.io.BufferedReader; | |
| 11 | +import java.io.BufferedWriter; | |
| 12 | +import java.io.File; | |
| 13 | +import java.io.FileInputStream; | |
| 14 | +import java.io.FileOutputStream; | |
| 15 | +import java.io.IOException; | |
| 16 | +import java.io.InputStreamReader; | |
| 17 | +import java.io.OutputStreamWriter; | |
| 18 | +import java.util.ArrayList; | |
| 19 | + | |
| 20 | +/** | |
| 21 | + * | |
| 22 | + * @author kgto | |
| 23 | + */ | |
| 24 | +public class SearchDataRW { | |
| 25 | + | |
| 26 | + private final String splitchar = "\t"; | |
| 27 | + | |
| 28 | + private String UrlAdress; | |
| 29 | + private ArrayList slist; | |
| 30 | + | |
| 31 | + public void seturl(String UrlAdress) { | |
| 32 | + this.UrlAdress = UrlAdress; | |
| 33 | + } | |
| 34 | + | |
| 35 | + public void setslist(ArrayList slist) { | |
| 36 | + this.slist = slist; | |
| 37 | + } | |
| 38 | + | |
| 39 | + public String geturl() { | |
| 40 | + return UrlAdress; | |
| 41 | + } | |
| 42 | + | |
| 43 | + public ArrayList getslist() { | |
| 44 | + return slist; | |
| 45 | + } | |
| 46 | + | |
| 47 | + /** | |
| 48 | + * 保存 | |
| 49 | + * @param file | |
| 50 | + */ | |
| 51 | + public void save(File file) { | |
| 52 | + | |
| 53 | + try { | |
| 54 | + //空のファイルを作成 | |
| 55 | + file.createNewFile(); | |
| 56 | + | |
| 57 | + FileOutputStream fileoutputstream = new FileOutputStream(file); | |
| 58 | + OutputStreamWriter outputstreamwriter = new OutputStreamWriter(fileoutputstream, "UTF-8"); | |
| 59 | + BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter); | |
| 60 | + | |
| 61 | + // URL | |
| 62 | + bufferedwriter.write(UrlAdress); | |
| 63 | + bufferedwriter.write("\n"); | |
| 64 | + // 検索情報 | |
| 65 | + for (Object slist1 : slist) { | |
| 66 | + SearchData sdat = (SearchData) slist1; | |
| 67 | + StringBuilder str = new StringBuilder(); | |
| 68 | + str.append(sdat.getitem()).append(splitchar); | |
| 69 | + str.append(sdat.getHtmltag()).append(splitchar); | |
| 70 | + str.append(sdat.getHtmlid()).append(splitchar); | |
| 71 | + str.append(sdat.getHtmlclass()).append(splitchar); | |
| 72 | + str.append(sdat.getaround()).append(splitchar); | |
| 73 | + str.append(sdat.getregexp()).append("\n"); | |
| 74 | + | |
| 75 | + bufferedwriter.write(str.toString()); | |
| 76 | + } | |
| 77 | + bufferedwriter.close(); | |
| 78 | + | |
| 79 | + } catch(IOException e) { | |
| 80 | + System.out.println(e); | |
| 81 | + } | |
| 82 | + } | |
| 83 | + | |
| 84 | + /** | |
| 85 | + * 読込 | |
| 86 | + * @param file | |
| 87 | + */ | |
| 88 | + public void load(File file) { | |
| 89 | + slist = new ArrayList(); | |
| 90 | + | |
| 91 | + try { | |
| 92 | + FileInputStream fileinputstream = new FileInputStream(file); | |
| 93 | + InputStreamReader inputstreamreader = new InputStreamReader(fileinputstream, "UTF-8"); | |
| 94 | + BufferedReader bufferedreader = new BufferedReader(inputstreamreader); | |
| 95 | + | |
| 96 | + String rec; | |
| 97 | + | |
| 98 | + // URL | |
| 99 | + UrlAdress = bufferedreader.readLine(); | |
| 100 | + // 検索情報 | |
| 101 | + while((rec = bufferedreader.readLine()) != null) { | |
| 102 | + String[] recary = rec.split(splitchar, -1); | |
| 103 | + SearchData sdat = new SearchData(); | |
| 104 | + sdat.setitem(recary[0]); | |
| 105 | + sdat.setHtmltag(recary[1]); | |
| 106 | + sdat.setHtmlid(recary[2]); | |
| 107 | + sdat.setHtmlclass(recary[3]); | |
| 108 | + sdat.setaround(recary[4]); | |
| 109 | + sdat.setregexp(recary[5]); | |
| 110 | + | |
| 111 | + slist.add(sdat); | |
| 112 | + } | |
| 113 | + bufferedreader.close(); | |
| 114 | + | |
| 115 | + } catch(IOException e) { | |
| 116 | + System.out.println(e); | |
| 117 | + } | |
| 118 | + | |
| 119 | + } | |
| 120 | + | |
| 121 | +} |
| @@ -0,0 +1,361 @@ | ||
| 1 | +/* | |
| 2 | + * To change this license header, choose License Headers in Project Properties. | |
| 3 | + * To change this template file, choose Tools | Templates | |
| 4 | + * and open the template in the editor. | |
| 5 | + */ | |
| 6 | + | |
| 7 | +package Form; | |
| 8 | + | |
| 9 | +import Lib.HtmlParser; | |
| 10 | +import Lib.SearchData; | |
| 11 | +import java.io.File; | |
| 12 | +import java.util.*; | |
| 13 | +import javax.swing.JFileChooser; | |
| 14 | +import javax.swing.filechooser.FileNameExtensionFilter; | |
| 15 | +import org.jdesktop.observablecollections.ObservableCollections; | |
| 16 | + | |
| 17 | +/** | |
| 18 | + * HTMLページ上の特定の項目を検索し、その項目内容の値を取得する。 | |
| 19 | + * @author kgto | |
| 20 | + */ | |
| 21 | +public class HtmlSearch extends javax.swing.JFrame { | |
| 22 | + | |
| 23 | + private ArrayList slist = new ArrayList(); | |
| 24 | + private List serachDataList = ObservableCollections.observableList(slist); | |
| 25 | + private SearchDataRW sio = new SearchDataRW(); | |
| 26 | + | |
| 27 | + /** | |
| 28 | + * Creates new form Frame1 | |
| 29 | + */ | |
| 30 | + public HtmlSearch() { | |
| 31 | + initComponents(); | |
| 32 | + } | |
| 33 | + | |
| 34 | + public List getSerachDataList() { | |
| 35 | + return this.serachDataList; | |
| 36 | + } | |
| 37 | + | |
| 38 | + public void setSerachDataList(List serachDataList) { | |
| 39 | + this.serachDataList = serachDataList; | |
| 40 | + } | |
| 41 | + | |
| 42 | + /** | |
| 43 | + * This method is called from within the constructor to initialize the form. | |
| 44 | + * WARNING: Do NOT modify this code. The content of this method is always | |
| 45 | + * regenerated by the Form Editor. | |
| 46 | + */ | |
| 47 | + @SuppressWarnings("unchecked") | |
| 48 | + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents | |
| 49 | + private void initComponents() { | |
| 50 | + bindingGroup = new org.jdesktop.beansbinding.BindingGroup(); | |
| 51 | + | |
| 52 | + jFileChooser1 = new javax.swing.JFileChooser(); | |
| 53 | + jLabel1 = new javax.swing.JLabel(); | |
| 54 | + jTxtUrl = new javax.swing.JTextField(); | |
| 55 | + jBtnSearch = new javax.swing.JButton(); | |
| 56 | + jPanel1 = new javax.swing.JPanel(); | |
| 57 | + jScrollPane1 = new javax.swing.JScrollPane(); | |
| 58 | + jTable1 = new javax.swing.JTable(); | |
| 59 | + jBtnRowIns = new javax.swing.JButton(); | |
| 60 | + jBtnRowDel = new javax.swing.JButton(); | |
| 61 | + jBtnRowCpy = new javax.swing.JButton(); | |
| 62 | + jPanel2 = new javax.swing.JPanel(); | |
| 63 | + jScrollPane2 = new javax.swing.JScrollPane(); | |
| 64 | + jTxtRtn = new javax.swing.JTextArea(); | |
| 65 | + jMenuBar1 = new javax.swing.JMenuBar(); | |
| 66 | + jMenu1 = new javax.swing.JMenu(); | |
| 67 | + jMenuLoad = new javax.swing.JMenuItem(); | |
| 68 | + jMenuSave = new javax.swing.JMenuItem(); | |
| 69 | + jMenu2 = new javax.swing.JMenu(); | |
| 70 | + | |
| 71 | + jFileChooser1.setCurrentDirectory(new java.io.File("C:\\zz_work\\java")); | |
| 72 | + jFileChooser1.setDialogTitle(""); | |
| 73 | + jFileChooser1.setFileFilter(new FileNameExtensionFilter("TEXTファイル", "txt")); | |
| 74 | + | |
| 75 | + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); | |
| 76 | + setTitle("タグ検索"); | |
| 77 | + | |
| 78 | + jLabel1.setText(" URL:"); | |
| 79 | + | |
| 80 | + jBtnSearch.setText("検索"); | |
| 81 | + jBtnSearch.addActionListener(new java.awt.event.ActionListener() { | |
| 82 | + public void actionPerformed(java.awt.event.ActionEvent evt) { | |
| 83 | + jBtnSearchActionPerformed(evt); | |
| 84 | + } | |
| 85 | + }); | |
| 86 | + | |
| 87 | + jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("検索情報")); | |
| 88 | + | |
| 89 | + jTable1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); | |
| 90 | + jTable1.getTableHeader().setReorderingAllowed(false); | |
| 91 | + | |
| 92 | + org.jdesktop.beansbinding.ELProperty eLProperty = org.jdesktop.beansbinding.ELProperty.create("${serachDataList}"); | |
| 93 | + org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, eLProperty, jTable1); | |
| 94 | + org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${item}")); | |
| 95 | + columnBinding.setColumnName("項目名"); | |
| 96 | + columnBinding.setColumnClass(String.class); | |
| 97 | + columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${htmltag}")); | |
| 98 | + columnBinding.setColumnName("タグ"); | |
| 99 | + columnBinding.setColumnClass(String.class); | |
| 100 | + columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${htmlid}")); | |
| 101 | + columnBinding.setColumnName("ID"); | |
| 102 | + columnBinding.setColumnClass(String.class); | |
| 103 | + columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${htmlclass}")); | |
| 104 | + columnBinding.setColumnName("クラス"); | |
| 105 | + columnBinding.setColumnClass(String.class); | |
| 106 | + columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${around}")); | |
| 107 | + columnBinding.setColumnName("位置"); | |
| 108 | + columnBinding.setColumnClass(String.class); | |
| 109 | + columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${regexp}")); | |
| 110 | + columnBinding.setColumnName("抽出条件"); | |
| 111 | + columnBinding.setColumnClass(String.class); | |
| 112 | + bindingGroup.addBinding(jTableBinding); | |
| 113 | + jTableBinding.bind(); | |
| 114 | + jScrollPane1.setViewportView(jTable1); | |
| 115 | + | |
| 116 | + jBtnRowIns.setText("行挿入"); | |
| 117 | + jBtnRowIns.addActionListener(new java.awt.event.ActionListener() { | |
| 118 | + public void actionPerformed(java.awt.event.ActionEvent evt) { | |
| 119 | + jBtnRowInsActionPerformed(evt); | |
| 120 | + } | |
| 121 | + }); | |
| 122 | + | |
| 123 | + jBtnRowDel.setText("行削除"); | |
| 124 | + jBtnRowDel.addActionListener(new java.awt.event.ActionListener() { | |
| 125 | + public void actionPerformed(java.awt.event.ActionEvent evt) { | |
| 126 | + jBtnRowDelActionPerformed(evt); | |
| 127 | + } | |
| 128 | + }); | |
| 129 | + | |
| 130 | + jBtnRowCpy.setText("行コピー"); | |
| 131 | + jBtnRowCpy.addActionListener(new java.awt.event.ActionListener() { | |
| 132 | + public void actionPerformed(java.awt.event.ActionEvent evt) { | |
| 133 | + jBtnRowCpyActionPerformed(evt); | |
| 134 | + } | |
| 135 | + }); | |
| 136 | + | |
| 137 | + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); | |
| 138 | + jPanel1.setLayout(jPanel1Layout); | |
| 139 | + jPanel1Layout.setHorizontalGroup( | |
| 140 | + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
| 141 | + .addGroup(jPanel1Layout.createSequentialGroup() | |
| 142 | + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) | |
| 143 | + .addComponent(jBtnRowCpy) | |
| 144 | + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 145 | + .addComponent(jBtnRowDel) | |
| 146 | + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 147 | + .addComponent(jBtnRowIns)) | |
| 148 | + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) | |
| 149 | + ); | |
| 150 | + jPanel1Layout.setVerticalGroup( | |
| 151 | + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
| 152 | + .addGroup(jPanel1Layout.createSequentialGroup() | |
| 153 | + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE) | |
| 154 | + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 155 | + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | |
| 156 | + .addComponent(jBtnRowDel) | |
| 157 | + .addComponent(jBtnRowIns) | |
| 158 | + .addComponent(jBtnRowCpy))) | |
| 159 | + ); | |
| 160 | + | |
| 161 | + jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("検索結果")); | |
| 162 | + | |
| 163 | + jTxtRtn.setColumns(20); | |
| 164 | + jTxtRtn.setRows(5); | |
| 165 | + jScrollPane2.setViewportView(jTxtRtn); | |
| 166 | + | |
| 167 | + javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); | |
| 168 | + jPanel2.setLayout(jPanel2Layout); | |
| 169 | + jPanel2Layout.setHorizontalGroup( | |
| 170 | + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
| 171 | + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 387, Short.MAX_VALUE) | |
| 172 | + ); | |
| 173 | + jPanel2Layout.setVerticalGroup( | |
| 174 | + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
| 175 | + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE) | |
| 176 | + ); | |
| 177 | + | |
| 178 | + jMenu1.setText("ファイル"); | |
| 179 | + | |
| 180 | + jMenuLoad.setText("LOAD"); | |
| 181 | + jMenuLoad.addActionListener(new java.awt.event.ActionListener() { | |
| 182 | + public void actionPerformed(java.awt.event.ActionEvent evt) { | |
| 183 | + jMenuLoadActionPerformed(evt); | |
| 184 | + } | |
| 185 | + }); | |
| 186 | + jMenu1.add(jMenuLoad); | |
| 187 | + | |
| 188 | + jMenuSave.setText("SAVE"); | |
| 189 | + jMenuSave.addActionListener(new java.awt.event.ActionListener() { | |
| 190 | + public void actionPerformed(java.awt.event.ActionEvent evt) { | |
| 191 | + jMenuSaveActionPerformed(evt); | |
| 192 | + } | |
| 193 | + }); | |
| 194 | + jMenu1.add(jMenuSave); | |
| 195 | + | |
| 196 | + jMenuBar1.add(jMenu1); | |
| 197 | + | |
| 198 | + jMenu2.setText("検索"); | |
| 199 | + jMenu2.addMouseListener(new java.awt.event.MouseAdapter() { | |
| 200 | + public void mouseClicked(java.awt.event.MouseEvent evt) { | |
| 201 | + jMenu2MouseClicked(evt); | |
| 202 | + } | |
| 203 | + }); | |
| 204 | + jMenuBar1.add(jMenu2); | |
| 205 | + | |
| 206 | + setJMenuBar(jMenuBar1); | |
| 207 | + | |
| 208 | + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); | |
| 209 | + getContentPane().setLayout(layout); | |
| 210 | + layout.setHorizontalGroup( | |
| 211 | + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
| 212 | + .addGroup(layout.createSequentialGroup() | |
| 213 | + .addComponent(jLabel1) | |
| 214 | + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 215 | + .addComponent(jTxtUrl) | |
| 216 | + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 217 | + .addComponent(jBtnSearch)) | |
| 218 | + .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) | |
| 219 | + .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) | |
| 220 | + ); | |
| 221 | + layout.setVerticalGroup( | |
| 222 | + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
| 223 | + .addGroup(layout.createSequentialGroup() | |
| 224 | + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | |
| 225 | + .addComponent(jLabel1) | |
| 226 | + .addComponent(jTxtUrl, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) | |
| 227 | + .addComponent(jBtnSearch)) | |
| 228 | + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 229 | + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) | |
| 230 | + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 231 | + .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) | |
| 232 | + ); | |
| 233 | + | |
| 234 | + bindingGroup.bind(); | |
| 235 | + | |
| 236 | + pack(); | |
| 237 | + }// </editor-fold>//GEN-END:initComponents | |
| 238 | + | |
| 239 | + private void jBtnRowInsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnRowInsActionPerformed | |
| 240 | + int SelectedRow = jTable1.getSelectedRow(); | |
| 241 | + SearchData sdat = new SearchData(); | |
| 242 | + | |
| 243 | + if(SelectedRow >= 0) { | |
| 244 | + this.serachDataList.add(SelectedRow, sdat); | |
| 245 | + } else { | |
| 246 | + this.serachDataList.add(sdat); | |
| 247 | + } | |
| 248 | + }//GEN-LAST:event_jBtnRowInsActionPerformed | |
| 249 | + | |
| 250 | + private void jBtnRowDelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnRowDelActionPerformed | |
| 251 | + int SelectedRow = jTable1.getSelectedRow(); | |
| 252 | + if(!(SelectedRow < 0)) { | |
| 253 | + this.serachDataList.remove(SelectedRow); | |
| 254 | + } | |
| 255 | + }//GEN-LAST:event_jBtnRowDelActionPerformed | |
| 256 | + | |
| 257 | + private void jMenuLoadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuLoadActionPerformed | |
| 258 | + int selected = jFileChooser1.showOpenDialog(this); | |
| 259 | + if (selected == JFileChooser.APPROVE_OPTION) { | |
| 260 | + File file = jFileChooser1.getSelectedFile(); | |
| 261 | + serachDataList.clear(); | |
| 262 | + sio.load(file); | |
| 263 | + jTxtUrl.setText(sio.geturl()); | |
| 264 | + serachDataList.addAll(sio.getslist()); | |
| 265 | + } | |
| 266 | + }//GEN-LAST:event_jMenuLoadActionPerformed | |
| 267 | + | |
| 268 | + private void jMenuSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuSaveActionPerformed | |
| 269 | + int selected = jFileChooser1.showSaveDialog(this); | |
| 270 | + if (selected == JFileChooser.APPROVE_OPTION) { | |
| 271 | + File file = jFileChooser1.getSelectedFile(); | |
| 272 | + sio.seturl(jTxtUrl.getText()); | |
| 273 | + sio.setslist(slist); | |
| 274 | + sio.save(file); | |
| 275 | + } | |
| 276 | + }//GEN-LAST:event_jMenuSaveActionPerformed | |
| 277 | + | |
| 278 | + private void jMenu2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jMenu2MouseClicked | |
| 279 | + jTxtRtn.setText(null); | |
| 280 | + HtmlParser par = new HtmlParser(jTxtUrl.getText()); | |
| 281 | + for (Object slist1 : slist) { | |
| 282 | + String rtn = par.search((SearchData)slist1); | |
| 283 | + jTxtRtn.append(rtn + "\r\n"); | |
| 284 | + } | |
| 285 | + }//GEN-LAST:event_jMenu2MouseClicked | |
| 286 | + | |
| 287 | + private void jBtnRowCpyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnRowCpyActionPerformed | |
| 288 | + int SelectedRow = jTable1.getSelectedRow(); | |
| 289 | + if(SelectedRow >= 0) { | |
| 290 | + SearchData SelectData = (SearchData)slist.get(SelectedRow); | |
| 291 | + SearchData Cpydata = new SearchData(SelectData); | |
| 292 | + this.serachDataList.add(SelectedRow, Cpydata); | |
| 293 | + } | |
| 294 | + }//GEN-LAST:event_jBtnRowCpyActionPerformed | |
| 295 | + | |
| 296 | + private void jBtnSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnSearchActionPerformed | |
| 297 | + jTxtRtn.setText(null); | |
| 298 | + HtmlParser par = new HtmlParser(jTxtUrl.getText()); | |
| 299 | + for (Object slist1 : slist) { | |
| 300 | + String rtn = par.search((SearchData)slist1); | |
| 301 | + jTxtRtn.append(rtn + "\r\n"); | |
| 302 | + } | |
| 303 | + }//GEN-LAST:event_jBtnSearchActionPerformed | |
| 304 | + | |
| 305 | + /** | |
| 306 | + * @param args the command line arguments | |
| 307 | + */ | |
| 308 | + public static void main(String args[]) { | |
| 309 | + /* Set the Nimbus look and feel */ | |
| 310 | + //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> | |
| 311 | + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. | |
| 312 | + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html | |
| 313 | + */ | |
| 314 | + try { | |
| 315 | + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { | |
| 316 | + if ("Nimbus".equals(info.getName())) { | |
| 317 | + javax.swing.UIManager.setLookAndFeel(info.getClassName()); | |
| 318 | + break; | |
| 319 | + } | |
| 320 | + } | |
| 321 | + } catch (ClassNotFoundException ex) { | |
| 322 | + java.util.logging.Logger.getLogger(HtmlSearch.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); | |
| 323 | + } catch (InstantiationException ex) { | |
| 324 | + java.util.logging.Logger.getLogger(HtmlSearch.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); | |
| 325 | + } catch (IllegalAccessException ex) { | |
| 326 | + java.util.logging.Logger.getLogger(HtmlSearch.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); | |
| 327 | + } catch (javax.swing.UnsupportedLookAndFeelException ex) { | |
| 328 | + java.util.logging.Logger.getLogger(HtmlSearch.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); | |
| 329 | + } | |
| 330 | + //</editor-fold> | |
| 331 | + | |
| 332 | + /* Create and display the form */ | |
| 333 | + java.awt.EventQueue.invokeLater(new Runnable() { | |
| 334 | + public void run() { | |
| 335 | + new HtmlSearch().setVisible(true); | |
| 336 | + } | |
| 337 | + }); | |
| 338 | + } | |
| 339 | + | |
| 340 | + // Variables declaration - do not modify//GEN-BEGIN:variables | |
| 341 | + private javax.swing.JButton jBtnRowCpy; | |
| 342 | + private javax.swing.JButton jBtnRowDel; | |
| 343 | + private javax.swing.JButton jBtnRowIns; | |
| 344 | + private javax.swing.JButton jBtnSearch; | |
| 345 | + private javax.swing.JFileChooser jFileChooser1; | |
| 346 | + private javax.swing.JLabel jLabel1; | |
| 347 | + private javax.swing.JMenu jMenu1; | |
| 348 | + private javax.swing.JMenu jMenu2; | |
| 349 | + private javax.swing.JMenuBar jMenuBar1; | |
| 350 | + private javax.swing.JMenuItem jMenuLoad; | |
| 351 | + private javax.swing.JMenuItem jMenuSave; | |
| 352 | + private javax.swing.JPanel jPanel1; | |
| 353 | + private javax.swing.JPanel jPanel2; | |
| 354 | + private javax.swing.JScrollPane jScrollPane1; | |
| 355 | + private javax.swing.JScrollPane jScrollPane2; | |
| 356 | + private javax.swing.JTable jTable1; | |
| 357 | + private javax.swing.JTextArea jTxtRtn; | |
| 358 | + private javax.swing.JTextField jTxtUrl; | |
| 359 | + private org.jdesktop.beansbinding.BindingGroup bindingGroup; | |
| 360 | + // End of variables declaration//GEN-END:variables | |
| 361 | +} |
| @@ -0,0 +1,204 @@ | ||
| 1 | +/* | |
| 2 | + * To change this license header, choose License Headers in Project Properties. | |
| 3 | + * To change this template file, choose Tools | Templates | |
| 4 | + * and open the template in the editor. | |
| 5 | + */ | |
| 6 | + | |
| 7 | +package Lib; | |
| 8 | + | |
| 9 | +import java.util.ArrayList; | |
| 10 | +import java.util.HashMap; | |
| 11 | +import javax.swing.text.MutableAttributeSet; | |
| 12 | +import javax.swing.text.html.HTML; | |
| 13 | +import javax.swing.text.html.HTMLEditorKit; | |
| 14 | + | |
| 15 | +/** | |
| 16 | + * | |
| 17 | + * @author kgto | |
| 18 | + */ | |
| 19 | +public class HtmlParserCallback extends HTMLEditorKit.ParserCallback { | |
| 20 | + | |
| 21 | + // デバック情報表示フラグ | |
| 22 | + final boolean DEBUG = false; | |
| 23 | + | |
| 24 | + // Tag毎の階層 | |
| 25 | + HashMap<HTML.Tag,Integer> tagMap = new HashMap<>(); | |
| 26 | + | |
| 27 | + // serach key 情報 | |
| 28 | + String keytag; | |
| 29 | + String keyid; | |
| 30 | + String keyclass; | |
| 31 | + | |
| 32 | + // serach key と一致時の情報退避 | |
| 33 | + int bufCount = 0; | |
| 34 | + HTML.Tag bufTag = null; | |
| 35 | + MutableAttributeSet bufAttr = null; | |
| 36 | + // serach key と一致時の情報格納ワーク | |
| 37 | + StringBuilder bufText; | |
| 38 | + | |
| 39 | + // serach key と一致時のデータ一覧 | |
| 40 | + ArrayList sData; | |
| 41 | + | |
| 42 | + public HtmlParserCallback(SearchData skey) { | |
| 43 | + | |
| 44 | + // キー情報展開 | |
| 45 | + keytag = skey.getHtmltag(); | |
| 46 | + keyid = skey.getHtmlid(); | |
| 47 | + keyclass = skey.getHtmlclass(); | |
| 48 | + | |
| 49 | + sData = new ArrayList(); | |
| 50 | + } | |
| 51 | + | |
| 52 | + public ArrayList getrtnData() { | |
| 53 | + return this.sData; | |
| 54 | + } | |
| 55 | + | |
| 56 | + @Override | |
| 57 | + public void handleStartTag(HTML.Tag tag, MutableAttributeSet attr, int pos){ | |
| 58 | + // Tag毎の階層を保持 | |
| 59 | + int count = 1; | |
| 60 | + if(tagMap.containsKey(tag)) { | |
| 61 | + count = tagMap.get(tag); | |
| 62 | + count++; | |
| 63 | + } | |
| 64 | + tagMap.put(tag, count); | |
| 65 | + | |
| 66 | + //--- DEBUG OUT ---- start --- | |
| 67 | + if(DEBUG) { | |
| 68 | + StringBuffer strBuf = new StringBuffer(); | |
| 69 | + String ret; | |
| 70 | + | |
| 71 | + strBuf.append(count).append(" : F : ").append(tag.toString()); | |
| 72 | + ret = (String)attr.getAttribute(HTML.Attribute.ID); | |
| 73 | + if(ret != null) { | |
| 74 | + strBuf.append(" [ID] ").append(ret); | |
| 75 | + } | |
| 76 | + ret = (String)attr.getAttribute(HTML.Attribute.CLASS); | |
| 77 | + if(ret != null) { | |
| 78 | + strBuf.append(" [CLASS] ").append(ret); | |
| 79 | + } | |
| 80 | + ret = (String)attr.getAttribute(HTML.Attribute.VALUE); | |
| 81 | + if(ret != null) { | |
| 82 | + strBuf.append(" [VALUE] ").append(ret); | |
| 83 | + } | |
| 84 | + System.out.println(strBuf); | |
| 85 | + } | |
| 86 | + //--- DEBUG OUT ---- end --- | |
| 87 | + | |
| 88 | + if(bufCount == 0) { | |
| 89 | + if(tag.toString().equals(keytag)) { | |
| 90 | + if(serachAttribute(attr)) { | |
| 91 | + bufCount = count; | |
| 92 | + bufTag = tag; | |
| 93 | + bufAttr = attr; | |
| 94 | + bufText = new StringBuilder(); | |
| 95 | + } | |
| 96 | + } | |
| 97 | + } | |
| 98 | + } | |
| 99 | + | |
| 100 | + @Override | |
| 101 | + public void handleEndTag(HTML.Tag tag, int pos){ | |
| 102 | + // Tag毎の階層を取得 | |
| 103 | + int count = 0; | |
| 104 | + if(tagMap.containsKey(tag)) { | |
| 105 | + count = tagMap.get(tag); | |
| 106 | + } | |
| 107 | + | |
| 108 | + //--- DEBUG OUT ---- start --- | |
| 109 | + if(DEBUG) { | |
| 110 | + System.out.println(count + " : E : " + tag.toString()); | |
| 111 | + } | |
| 112 | + //--- DEBUG OUT ---- end --- | |
| 113 | + | |
| 114 | + if(tag.equals(bufTag) && count <= bufCount) { | |
| 115 | + | |
| 116 | + // 溜め込んだ一致情報をリストへ格納 | |
| 117 | + sData.add(bufText.toString()); | |
| 118 | + | |
| 119 | + // 退避したserach keyとの一致情報クリア | |
| 120 | + bufCount = 0; | |
| 121 | + bufTag = null; | |
| 122 | + bufAttr = null; | |
| 123 | + bufText = null; | |
| 124 | + } | |
| 125 | + | |
| 126 | + // Tag毎の階層減算 | |
| 127 | + tagMap.put(tag, --count); | |
| 128 | + } | |
| 129 | + | |
| 130 | + @Override | |
| 131 | + public void handleText(char[] data, int pos){ | |
| 132 | + //--- DEBUG OUT ---- start --- | |
| 133 | + if(DEBUG) { | |
| 134 | + String dat = new String(data); | |
| 135 | + System.out.println(dat); | |
| 136 | + } | |
| 137 | + //--- DEBUG OUT ---- end --- | |
| 138 | + String splitchar = "\t"; | |
| 139 | + | |
| 140 | + //制御文字の削除 | |
| 141 | + // 0xa0 | |
| 142 | + StringBuilder buf = new StringBuilder(); | |
| 143 | + for(int i = 0; i < data.length; i++) { | |
| 144 | + if(data[i] > 0x1f && data[i] != 0x7f && data[i] != 0xa0) { | |
| 145 | + buf.append(data[i]); | |
| 146 | + } | |
| 147 | + } | |
| 148 | + | |
| 149 | + if(bufCount > 0) { | |
| 150 | + if(bufText.length() > 0) { | |
| 151 | + bufText.append(splitchar); | |
| 152 | + } | |
| 153 | + bufText.append(buf.toString()); | |
| 154 | + } | |
| 155 | + | |
| 156 | + } | |
| 157 | + | |
| 158 | + @Override | |
| 159 | + public void handleSimpleTag(HTML.Tag tag, MutableAttributeSet attr, int pos){ | |
| 160 | + //--- DEBUG OUT ---- start --- | |
| 161 | + if(DEBUG) { | |
| 162 | + StringBuffer strBuf = new StringBuffer(); | |
| 163 | + String ret; | |
| 164 | + strBuf.append("x : S : ").append(tag.toString()); | |
| 165 | + ret = (String)attr.getAttribute(HTML.Attribute.VALUE); | |
| 166 | + if(ret != null) { | |
| 167 | + strBuf.append(" [VALUE] ").append(ret); | |
| 168 | + } | |
| 169 | + System.out.println(strBuf); | |
| 170 | + } | |
| 171 | + //--- DEBUG OUT ---- end --- | |
| 172 | + } | |
| 173 | + | |
| 174 | + /** | |
| 175 | + * ページ内のID/CLASS値と検索キーを比較する。 | |
| 176 | + * @param attr ページのMutableAttributeSet | |
| 177 | + * @return boolean 検索キーと一致の時、true | |
| 178 | + */ | |
| 179 | + public boolean serachAttribute(MutableAttributeSet attr) { | |
| 180 | + String currentID = (String)attr.getAttribute(HTML.Attribute.ID); | |
| 181 | + String currentClass = (String)attr.getAttribute(HTML.Attribute.CLASS); | |
| 182 | + | |
| 183 | + if(keyid.isEmpty() == false && keyclass.isEmpty() == false) { | |
| 184 | + if(keyid.equals(currentID) && keyclass.equals(currentClass)) { | |
| 185 | + return true; | |
| 186 | + } | |
| 187 | + } | |
| 188 | + | |
| 189 | + if(keyid.isEmpty() == false) { | |
| 190 | + if(keyid.equals(currentID)) { | |
| 191 | + return true; | |
| 192 | + } | |
| 193 | + } | |
| 194 | + | |
| 195 | + if(keyclass.isEmpty() == false) { | |
| 196 | + if(keyclass.equals(currentClass)) { | |
| 197 | + return true; | |
| 198 | + } | |
| 199 | + } | |
| 200 | + | |
| 201 | + return false; | |
| 202 | + } | |
| 203 | + | |
| 204 | +} |
| @@ -0,0 +1,82 @@ | ||
| 1 | +/* | |
| 2 | + * To change this license header, choose License Headers in Project Properties. | |
| 3 | + * To change this template file, choose Tools | Templates | |
| 4 | + * and open the template in the editor. | |
| 5 | + */ | |
| 6 | + | |
| 7 | +package Lib; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * | |
| 11 | + * @author kgto | |
| 12 | + */ | |
| 13 | +public class SearchData { | |
| 14 | + | |
| 15 | + private String item; | |
| 16 | + private String htmltag; | |
| 17 | + private String htmlid; | |
| 18 | + private String htmlclass; | |
| 19 | + private String around; | |
| 20 | + private String regexp; | |
| 21 | + | |
| 22 | + public SearchData() { | |
| 23 | + } | |
| 24 | + | |
| 25 | + public SearchData(SearchData dat) { | |
| 26 | + this.item = dat.getitem(); | |
| 27 | + this.htmltag = dat.getHtmltag(); | |
| 28 | + this.htmlid = dat.getHtmlid(); | |
| 29 | + this.htmlclass = dat.getHtmlclass(); | |
| 30 | + this.around = dat.getaround(); | |
| 31 | + this.regexp = dat.getregexp(); | |
| 32 | + } | |
| 33 | + | |
| 34 | + public void setitem(String item) { | |
| 35 | + this.item = item; | |
| 36 | + } | |
| 37 | + | |
| 38 | + public void setHtmltag(String htmltag) { | |
| 39 | + this.htmltag = htmltag; | |
| 40 | + } | |
| 41 | + | |
| 42 | + public void setHtmlid(String htmlid) { | |
| 43 | + this.htmlid = htmlid; | |
| 44 | + } | |
| 45 | + | |
| 46 | + public void setHtmlclass(String htmlclass) { | |
| 47 | + this.htmlclass = htmlclass; | |
| 48 | + } | |
| 49 | + | |
| 50 | + public void setaround(String around) { | |
| 51 | + this.around = around; | |
| 52 | + } | |
| 53 | + | |
| 54 | + public void setregexp(String regexp) { | |
| 55 | + this.regexp = regexp; | |
| 56 | + } | |
| 57 | + | |
| 58 | + public String getitem() { | |
| 59 | + return item; | |
| 60 | + } | |
| 61 | + | |
| 62 | + public String getHtmltag() { | |
| 63 | + return htmltag; | |
| 64 | + } | |
| 65 | + | |
| 66 | + public String getHtmlid() { | |
| 67 | + return htmlid; | |
| 68 | + } | |
| 69 | + | |
| 70 | + public String getHtmlclass() { | |
| 71 | + return htmlclass; | |
| 72 | + } | |
| 73 | + | |
| 74 | + public String getaround() { | |
| 75 | + return around; | |
| 76 | + } | |
| 77 | + | |
| 78 | + public String getregexp() { | |
| 79 | + return regexp; | |
| 80 | + } | |
| 81 | + | |
| 82 | +} |
| @@ -0,0 +1,201 @@ | ||
| 1 | +/* | |
| 2 | + * To change this license header, choose License Headers in Project Properties. | |
| 3 | + * To change this template file, choose Tools | Templates | |
| 4 | + * and open the template in the editor. | |
| 5 | + */ | |
| 6 | + | |
| 7 | +package Lib; | |
| 8 | + | |
| 9 | +import java.io.*; | |
| 10 | +import java.net.*; | |
| 11 | +import java.util.ArrayList; | |
| 12 | +import java.util.regex.Matcher; | |
| 13 | +import java.util.regex.Pattern; | |
| 14 | +import javax.swing.text.html.parser.ParserDelegator; | |
| 15 | + | |
| 16 | +/** | |
| 17 | + * | |
| 18 | + * @author kgto | |
| 19 | + */ | |
| 20 | +public class HtmlParser { | |
| 21 | + | |
| 22 | + String UrlAdress; | |
| 23 | + String pageData; | |
| 24 | + | |
| 25 | + ArrayList sData; | |
| 26 | + | |
| 27 | + // 作業ワーク | |
| 28 | + String htmltag; | |
| 29 | + String htmlid; | |
| 30 | + String htmlclass; | |
| 31 | + | |
| 32 | + public HtmlParser() { | |
| 33 | + UrlAdress = null; | |
| 34 | + } | |
| 35 | + | |
| 36 | + public HtmlParser(String UrlAdress) { | |
| 37 | + this.UrlAdress = UrlAdress; | |
| 38 | + getpageData(); | |
| 39 | + } | |
| 40 | + | |
| 41 | + public void seturl(String UrlAdress) { | |
| 42 | + this.UrlAdress = UrlAdress; | |
| 43 | + getpageData(); | |
| 44 | + } | |
| 45 | + | |
| 46 | + /** | |
| 47 | + * HTMLページ内検索. | |
| 48 | + * 検索キーとして渡されたタグ,ID,クラスから、対象となるタグを探し出し、 | |
| 49 | + * around(タグ位置)として指定された箇所の文字列をregexp(正規表現)で指定された整形を | |
| 50 | + * 行った結果を返す。<br> | |
| 51 | + * aroundの初期値:0 検索キーとして未指定(未入力)の場合、最初(0)の文字列。<br> | |
| 52 | + * regexpが指定(入力)ありの場合、正規表現にて整形を行う。<br> | |
| 53 | + * 渡された検索キーに一致するタグが存在しなかった場合、NULLを返す。 | |
| 54 | + * @param skey 検索キーデータ(SearchData) | |
| 55 | + * @return String 検索キーに一致するデータの文字列 | |
| 56 | + */ | |
| 57 | + public String search(SearchData skey) { | |
| 58 | + | |
| 59 | + String item = skey.getitem(); | |
| 60 | + String regexp = skey.getregexp(); | |
| 61 | + | |
| 62 | + // htmlページ内を検索 | |
| 63 | + if(isHtmlkeyEq(skey) == false) { | |
| 64 | + serchpageData(skey); | |
| 65 | + } | |
| 66 | + | |
| 67 | + // 検索位置を数値変換 | |
| 68 | + String around = skey.getaround(); | |
| 69 | + byte bAround = 0; | |
| 70 | + if(around.length() > 0) { | |
| 71 | + bAround = Byte.parseByte(around); | |
| 72 | + } | |
| 73 | + | |
| 74 | + if(bAround < sData.size()) { | |
| 75 | + String str = (String)sData.get(bAround); | |
| 76 | + String rtn = RegularExpression(str, regexp); | |
| 77 | + return item + "\t" + rtn; | |
| 78 | + } | |
| 79 | + return null; | |
| 80 | + } | |
| 81 | + | |
| 82 | + /** | |
| 83 | + * 直近のHTMLタグ/ID/CLASS値と引数の値を比較する. | |
| 84 | + * @param skey HTMLタグ/ID/CLASSが格納された検索キー | |
| 85 | + * @return boolean HTMLタグ/ID/CLASS値が一致する時、true | |
| 86 | + */ | |
| 87 | + public boolean isHtmlkeyEq(SearchData skey) { | |
| 88 | + | |
| 89 | + String stag = skey.getHtmltag(); | |
| 90 | + String sid = skey.getHtmlid(); | |
| 91 | + String sclass = skey.getHtmlclass(); | |
| 92 | + | |
| 93 | + boolean rtn = true; | |
| 94 | + | |
| 95 | + // htmltag | |
| 96 | + if(htmltag == null) { | |
| 97 | + rtn = false; | |
| 98 | + } else { | |
| 99 | + if(htmltag.equals(stag) == false) { | |
| 100 | + rtn = false; | |
| 101 | + } | |
| 102 | + } | |
| 103 | + | |
| 104 | + // htmlid | |
| 105 | + if(htmlid == null) { | |
| 106 | + rtn = false; | |
| 107 | + } else { | |
| 108 | + if(htmlid.equals(sid) == false) { | |
| 109 | + rtn = false; | |
| 110 | + } | |
| 111 | + } | |
| 112 | + | |
| 113 | + // htmlclass | |
| 114 | + if(htmlclass == null) { | |
| 115 | + rtn = false; | |
| 116 | + } else { | |
| 117 | + if(htmlclass.equals(sclass) == false) { | |
| 118 | + rtn = false; | |
| 119 | + } | |
| 120 | + } | |
| 121 | + | |
| 122 | + if(!rtn) { | |
| 123 | + htmltag = stag; | |
| 124 | + htmlid = sid; | |
| 125 | + htmlclass = sclass; | |
| 126 | + } | |
| 127 | + | |
| 128 | + return rtn; | |
| 129 | + } | |
| 130 | + | |
| 131 | + /** | |
| 132 | + * 正規表現検索. | |
| 133 | + * @param strdata | |
| 134 | + * @param regexp | |
| 135 | + * @return | |
| 136 | + */ | |
| 137 | + public String RegularExpression(String strdata, String regexp) { | |
| 138 | + String expdata = null; | |
| 139 | + | |
| 140 | + //regexpのチェック | |
| 141 | + if(regexp.isEmpty()) { | |
| 142 | + expdata = strdata; | |
| 143 | + return expdata; | |
| 144 | + } | |
| 145 | + | |
| 146 | + //正規表現検索 | |
| 147 | + Pattern ptn = Pattern.compile(regexp); | |
| 148 | + Matcher matchdata = ptn.matcher(strdata); | |
| 149 | + if (matchdata.find()) { | |
| 150 | + if(matchdata.groupCount() >= 1) { | |
| 151 | + expdata = matchdata.group(1); | |
| 152 | + } | |
| 153 | + } | |
| 154 | + return expdata; | |
| 155 | + } | |
| 156 | + | |
| 157 | + /** | |
| 158 | + * インターネット接続. | |
| 159 | + */ | |
| 160 | + public void getpageData() { | |
| 161 | + try { | |
| 162 | + URL url = new URL(UrlAdress); | |
| 163 | + HttpURLConnection con = (HttpURLConnection)url.openConnection(); | |
| 164 | + con.setRequestMethod("GET"); | |
| 165 | + BufferedReader reader = new BufferedReader( | |
| 166 | + new InputStreamReader(con.getInputStream(), "utf-8")); | |
| 167 | + String wkline; | |
| 168 | + StringBuilder sb = new StringBuilder(); | |
| 169 | + while((wkline = reader.readLine()) != null) { | |
| 170 | + sb.append(wkline).append("\n"); | |
| 171 | + } | |
| 172 | + pageData = sb.toString(); | |
| 173 | + | |
| 174 | + con.disconnect(); | |
| 175 | + } | |
| 176 | + catch(IOException e) { | |
| 177 | + System.err.println(e); | |
| 178 | + } | |
| 179 | + } | |
| 180 | + | |
| 181 | + /** | |
| 182 | + * HTMLパーサ. | |
| 183 | + * @param skey | |
| 184 | + */ | |
| 185 | + public void serchpageData(SearchData skey){ | |
| 186 | + Reader reader; | |
| 187 | + try { | |
| 188 | + reader = new BufferedReader(new StringReader(pageData)); | |
| 189 | + HtmlParserCallback cb = new HtmlParserCallback(skey); | |
| 190 | + ParserDelegator pd = new ParserDelegator(); | |
| 191 | + pd.parse(reader, cb, true); | |
| 192 | + reader.close(); | |
| 193 | + | |
| 194 | + sData = cb.getrtnData(); | |
| 195 | + | |
| 196 | + } catch (IOException e) { | |
| 197 | + System.err.println(e); | |
| 198 | + } | |
| 199 | + } | |
| 200 | + | |
| 201 | +} |