package nliveroid.nlr.main.parser; import java.util.regex.Matcher; import java.util.regex.Pattern; import nliveroid.nlr.main.ErrorCode; import nliveroid.nlr.main.LiveTab.SecondSendForm_GetLVTask; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; import android.util.Log; /** * 放送開始した際に * 放送情報を取得する * LiveTabのみで利用される * @author Owner * */ public class SecondEdit_GetLVParser implements ContentHandler { private StringBuilder innerText = new StringBuilder(1024); private boolean parseTarget = false; private boolean ancherTarget = false; private boolean lvFinded = false; private String[] ulck_desc = new String[2];//[0]ulck,[1]description private SecondSendForm_GetLVTask task; public SecondEdit_GetLVParser(SecondSendForm_GetLVTask task,ErrorCode error){ this.task = task; } private String getInnerText(char[] arg0,int arg2){ innerText = innerText.delete(0,arg0.length); innerText.append(arg0, 0, arg2); return innerText.toString(); } @Override public void characters(char[] arg0, int arg1, int arg2) throws SAXException { // Log.d("NLR","INNER ------- " + aa); if(parseTarget){ String inner = getInnerText(arg0,arg2); // Log.d("log","TASK FINISH ------- " + inner); if(inner.contains("既にこの時間に予約をしている")||inner.contains("配信開始を押すまで、一覧には表示されません")){ ancherTarget = true; }else if(inner.contains("既に順番待ちに並んでいるか")){ ancherTarget = true; }else if(inner.contains("WEBページの有効期限が切れています")){ lvFinded = true;//後のリトライをさせない為 task.finishCallBack("RETRYW"+ulck_desc[0]); }else if(inner.contains("混み合っております")){ lvFinded = true;//後のリトライをさせない為 try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } task.finishCallBack("RETRYC"); }else{ lvFinded = true;//後のリトライをさせない為 task.finishCallBack(inner); } parseTarget = false; } if(ancherTarget){ getInnerText(arg0,arg2);//Getting innerText } } @Override public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException { // Log.d("NLR","1elem " + arg1); // Log.d("NLR","2elem " + arg2); if(arg1.equals("li") && arg3 != null && arg3.getLength()>0){ for(int i = 0; i < arg3.getLength(); i++){ if(arg3.getValue(i).equals("error_message")){ Log.d("NLR","SECOND error_message --- "); parseTarget = true; } } } if(arg1.equals("input")){ for(int i = 0; i < arg3.getLength(); i++){ if(arg3.getLocalName(i).equals("name")){ if(arg3.getValue(i).equals("description")){ for(int j = 0; j < arg3.getLength(); j++){ if(arg3.getLocalName(j).equals("value")){ ulck_desc[1] = arg3.getValue(j); } } }else if(arg3.getValue(i).equals("usecoupon")||arg3.getValue(i).equals("confirm")){ Pattern pt = Pattern.compile("ulck_[0-9]+"); Matcher mc = null; for(int j = 0; j < arg3.getLength(); j++){ mc = pt.matcher(arg3.getValue(j)); if(mc.find()){ ulck_desc[0] = mc.group(); } } } } } } if(arg1.equals("div")&&arg3!=null){ for(int i = 0; i < arg3.getLength()&&!lvFinded; i++){ // Log.d("NLR","DIV --- val " + arg3.getValue(i)); if(arg3.getValue(i).equals("page_footer")){ task.finishCallBack("RETRY");//ulckなし+ページ終わり=枠取り失敗 これが不明 } } } } @Override public void endElement(String arg0, String arg1, String arg2)throws SAXException { if(ancherTarget){ Matcher glmc = Pattern.compile("lv[0-9]+").matcher(innerText); if(glmc.find()){ Log.d("NLR","find" ); String lv = glmc.group(); lvFinded = true; parseTarget = false; ancherTarget = false; task.finishCallBack(lv); } } if(ulck_desc!=null&&ulck_desc[0] != null && !ulck_desc[0].equals("")&&ulck_desc[1]!=null&&!ulck_desc[1].equals(""))task.finishCallBack(ulck_desc); } @Override public void endDocument() throws SAXException {} @Override public void endPrefixMapping(String arg0) throws SAXException {} @Override public void ignorableWhitespace(char[] arg0, int arg1, int arg2)throws SAXException {} @Override public void processingInstruction(String arg0, String arg1)throws SAXException {} @Override public void setDocumentLocator(Locator arg0) {} @Override public void skippedEntity(String arg0) throws SAXException {} @Override public void startDocument() throws SAXException {} @Override public void startPrefixMapping(String arg0, String arg1)throws SAXException {} }