Details | Last modification | View Log | SVN | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 15 | arune | 1 | /* |
| 2 | * File created by arune |
||
| 3 | * at 2006-may-21 |
||
| 4 | */ |
||
| 5 | package Macbeth.Modules.modCallerID; |
||
| 6 | |||
| 7 | import Macbeth.Utilities.UByte; |
||
| 8 | import java.io.*; |
||
| 9 | import java.net.URL; |
||
| 10 | import java.util.*; |
||
| 11 | |||
| 12 | import Macbeth.Utilities.MyDateTime; |
||
| 13 | import Macbeth.System.*; |
||
| 14 | import Macbeth.Utilities.*; |
||
| 15 | |||
| 16 | /** |
||
| 17 | * |
||
| 18 | * |
||
| 19 | * |
||
| 20 | * @author arune |
||
| 21 | */ |
||
| 22 | public class CallObject { |
||
| 23 | |||
| 24 | //private UByte[] data; |
||
| 25 | private String callerPhoneNr; |
||
| 26 | private String callerName; |
||
| 27 | private String callerAddress; |
||
| 28 | private String callDate; |
||
| 29 | private String callerOrtsnamn; |
||
| 30 | |||
| 31 | private ArrayList servers; //a list of servers |
||
| 32 | private int currentServer = -1; //the serverlist will cycle when connection fails, this var keeps track of current server |
||
| 33 | |||
| 34 | /** |
||
| 35 | * Creates a new instance of CallObject. |
||
| 36 | * @param data The byte value of this object. |
||
| 37 | */ |
||
| 38 | public CallObject(UByte[] data, ArrayList servers) { |
||
| 39 | //this.data = data; |
||
| 40 | callerName = ""; |
||
| 41 | callerAddress = ""; |
||
| 42 | callDate = MyDateTime.now(); |
||
| 43 | callerOrtsnamn = ""; |
||
| 44 | |||
| 45 | this.servers = servers; |
||
| 46 | |||
| 47 | //ska göras kontroller på detta nummer, t.ex. ska inte A/B/C/D/*/# komma med, if_numeric också typ |
||
| 48 | //för att fixa riktnummer separerat från resten (med en dash -) |
||
| 49 | //använd http://www.eniro.se/riktnummer/ |
||
| 50 | //stoppa i ortsnamn i callerOrtsnamn, används då inget namn+address dykt upp för nummret |
||
| 51 | |||
| 52 | //obs, börjar nummret med 07 ska de fyra första antas vara riktnummer |
||
| 53 | callerPhoneNr = ""; |
||
| 54 | for (int i = 1; i < data.length; i++) { |
||
| 55 | callerPhoneNr = callerPhoneNr + parseByte(data[i]); |
||
| 56 | } |
||
| 57 | |||
| 58 | //System.out.println("callerPhoneNr.length: " + callerPhoneNr.length()); |
||
| 59 | //om telefonnummret är längre än 7 och de två första siffrorna inte är 00 (utrikes) |
||
| 60 | if (callerPhoneNr.length() > 7 && !callerPhoneNr.substring(0,2).equals("00")) { |
||
| 61 | fixPhoneOrt(); |
||
| 62 | getNameAddress(); |
||
| 63 | |||
| 64 | } else if (callerPhoneNr.length() == 2) { |
||
| 65 | //System.out.println("callerPhoneNr: " + callerPhoneNr + " data[0].toString(): " + data[0].toString()); |
||
| 66 | if (parseByte(data[0]).equals("B") && callerPhoneNr.equals("00")) { |
||
| 67 | //System.out.println("Hidden"); |
||
| 68 | callerPhoneNr = "[Hidden number]"; |
||
| 69 | } else if (callerPhoneNr.equals("01")) { |
||
| 70 | //System.out.println("Secret"); |
||
| 71 | callerPhoneNr = "[Secret number]"; |
||
| 72 | } |
||
| 73 | } |
||
| 74 | |||
| 75 | } |
||
| 76 | |||
| 77 | public CallObject() { |
||
| 78 | this(new UByte[0], new ArrayList()); |
||
| 79 | } |
||
| 80 | |||
| 81 | public CallObject(String number) { |
||
| 82 | callerName = ""; |
||
| 83 | callerAddress = ""; |
||
| 84 | callDate = MyDateTime.now(); |
||
| 85 | callerOrtsnamn = ""; |
||
| 86 | callerPhoneNr = number; |
||
| 87 | |||
| 88 | //om telefonnummret är längre än 7 och de två första siffrorna inte är 00 (utrikes) |
||
| 89 | if (callerPhoneNr.length() > 7 && !callerPhoneNr.substring(0,2).equals("00")) { |
||
| 90 | fixPhoneOrt(); |
||
| 91 | //getDataFromEniro |
||
| 92 | } |
||
| 93 | } |
||
| 94 | |||
| 95 | private String getPart(String data, String startstr, String endstr) { |
||
| 96 | String out = null; |
||
| 97 | int start = data.indexOf(startstr); |
||
| 98 | //System.out.println("start: " + start); |
||
| 99 | if (start != -1) { |
||
| 100 | int end = data.indexOf(endstr,start); |
||
| 101 | //System.out.println("end: " + end); |
||
| 102 | if (end != -1) { |
||
| 103 | out = data.substring(start+startstr.length(),end); |
||
| 104 | //System.out.println("out: " + out); |
||
| 105 | } |
||
| 106 | } |
||
| 107 | |||
| 108 | return out; |
||
| 109 | } |
||
| 110 | |||
| 111 | private void getNameAddress() { |
||
| 112 | // denna funktion ska hämta data från www.arune.se/callerid/index.php?id=telenr |
||
| 113 | // meningen är att det är lättare att skriva om detta php-script om eniro/hitta.se skulle göra om |
||
| 114 | // php returnerar data xml-formaterat typ: |
||
| 115 | // <name>Katharina & Ulf Runeson</name> |
||
| 116 | // <address0>Färed Uggletorp 1</address0> |
||
| 117 | // <address1>545 90 Töreboda</address1> |
||
| 118 | |||
| 119 | ArrayList rows = getWebPage(callerPhoneNr); |
||
| 120 | String name = null; |
||
| 121 | String address0 = null; |
||
| 122 | String address1 = null; |
||
| 123 | |||
| 124 | for (int i = 0; i < rows.size(); i++) { |
||
| 125 | String row = (String)rows.get(i); |
||
| 126 | if (name == null) {name = getPart(row,"<name>","</name>");} |
||
| 127 | if (address0 == null) {address0 = getPart(row,"<address0>","</address0>");} |
||
| 128 | if (address1 == null) {address1 = getPart(row,"<address1>","</address1>");} |
||
| 129 | //System.out.println(row); |
||
| 130 | } |
||
| 131 | if (name != null) { |
||
| 132 | //name = replaceSweChar(name); |
||
| 133 | callerName = name; |
||
| 134 | //System.out.println("namn: " + name); |
||
| 135 | } |
||
| 136 | if (address0 != null) { |
||
| 137 | //address0 = replaceSweChar(address0); |
||
| 138 | callerAddress = address0; |
||
| 139 | //System.out.println("adress: " + address0); |
||
| 140 | } |
||
| 141 | if (address1 != null) { |
||
| 142 | //address1 = replaceSweChar(address1); |
||
| 143 | if (callerAddress.length() > 0) { |
||
| 144 | callerAddress = callerAddress + " "; |
||
| 145 | } |
||
| 146 | callerAddress = callerAddress + address1; |
||
| 147 | } |
||
| 148 | } |
||
| 149 | |||
| 150 | private String replaceSweChar(String text) { |
||
| 151 | //HURFAN GÖR MAN PÅ RIKTIGT?? ERSÄTT ALLA TECKEN UTOM 0-127 |
||
| 152 | //MED &#char; |
||
| 153 | //finns nog inbyggt i java, finns i php, se rss för posten |
||
| 154 | |||
| 155 | text = text.replaceAll("å","å"); |
||
| 156 | text = text.replaceAll("ä","ä"); |
||
| 157 | text = text.replaceAll("ö","ö"); |
||
| 158 | text = text.replaceAll("Å","Å"); |
||
| 159 | text = text.replaceAll("Ä","Ä"); |
||
| 160 | text = text.replaceAll("Ö","Ö"); |
||
| 161 | text = text.replaceAll("À","À"); |
||
| 162 | text = text.replaceAll("Á","Á"); |
||
| 163 | text = text.replaceAll("Â","Â"); |
||
| 164 | text = text.replaceAll("Ã","Ã"); |
||
| 165 | text = text.replaceAll("Æ","Æ"); |
||
| 166 | text = text.replaceAll("Ç","Ç"); |
||
| 167 | text = text.replaceAll("È","È"); |
||
| 168 | text = text.replaceAll("É","É"); |
||
| 169 | text = text.replaceAll("Ê","Ê"); |
||
| 170 | text = text.replaceAll("Ë","Ë"); |
||
| 171 | text = text.replaceAll("Ì","Ì"); |
||
| 172 | text = text.replaceAll("Í","Í"); |
||
| 173 | text = text.replaceAll("Ò","Ò"); |
||
| 174 | text = text.replaceAll("Ó","Ó"); |
||
| 175 | text = text.replaceAll("Ø","Ø"); |
||
| 176 | text = text.replaceAll("à","à"); |
||
| 177 | text = text.replaceAll("á","á"); |
||
| 178 | text = text.replaceAll("â","â"); |
||
| 179 | text = text.replaceAll("ã","ã"); |
||
| 180 | text = text.replaceAll("æ","æ"); |
||
| 181 | text = text.replaceAll("ç","ç"); |
||
| 182 | text = text.replaceAll("è","è"); |
||
| 183 | text = text.replaceAll("é","é"); |
||
| 184 | text = text.replaceAll("ê","ê"); |
||
| 185 | text = text.replaceAll("ë","ë"); |
||
| 186 | text = text.replaceAll("ì","ì"); |
||
| 187 | text = text.replaceAll("í","í"); |
||
| 188 | text = text.replaceAll("ò","ò"); |
||
| 189 | text = text.replaceAll("ó","ó"); |
||
| 190 | text = text.replaceAll("ø","ø"); |
||
| 191 | text = text.replaceAll("ù","ù"); |
||
| 192 | text = text.replaceAll("ú","ú"); |
||
| 193 | return text; |
||
| 194 | } |
||
| 195 | |||
| 196 | private ArrayList getWebPage(String id) { |
||
| 197 | ArrayList rowStrings = new ArrayList(); |
||
| 198 | |||
| 199 | String serverURL = getServerURL(); |
||
| 200 | |||
| 201 | if (!serverURL.equals("")) { |
||
| 202 | serverURL = serverURL + "/index.php?id=" + id; |
||
| 203 | try { |
||
| 204 | BufferedReader page = new BufferedReader(new InputStreamReader(new URL(serverURL).openStream())); |
||
| 205 | |||
| 206 | String curLine = page.readLine(); |
||
| 207 | while ( curLine != null ) { |
||
| 208 | rowStrings.add(curLine); |
||
| 209 | // get the next line |
||
| 210 | curLine = page.readLine(); |
||
| 211 | } |
||
| 212 | } |
||
| 213 | catch ( Exception ex ){ |
||
| 214 | //_errors.println("Comunication problem with caller-address-server, exception: " + ex.getMessage()); |
||
| 215 | currentServer++; |
||
| 216 | } |
||
| 217 | } |
||
| 218 | |||
| 219 | return rowStrings; |
||
| 220 | } |
||
| 221 | |||
| 222 | private String getServerURL() { |
||
| 223 | if (currentServer == -1) { |
||
| 224 | if (servers.size() == 0) { |
||
| 225 | return ""; } |
||
| 226 | else { |
||
| 227 | currentServer = 0; } |
||
| 228 | } else { |
||
| 229 | //currentServer räknas upp i catch:en nedan |
||
| 230 | } |
||
| 231 | if (currentServer >= servers.size()) { |
||
| 232 | currentServer = 0; } |
||
| 233 | return (String)servers.get(currentServer); |
||
| 234 | } |
||
| 235 | |||
| 236 | |||
| 237 | private void fixPhoneOrt() { |
||
| 238 | //om mobilnummer så sätt in en dash |
||
| 239 | if (callerPhoneNr.substring(0,2).equals("07")) { |
||
| 240 | callerPhoneNr = callerPhoneNr.substring(0,4) + "-" + callerPhoneNr.substring(4,callerPhoneNr.length()); |
||
| 241 | } else { |
||
| 242 | ArrayList riktnrSource = getHTMLSource("http://www.eniro.se/riktnummer/0-9.shtml"); |
||
| 243 | if (riktnrSource.size() != 0) { |
||
| 244 | //ortsnamn sparas mellan varven eftersom ortsnamn är på annan rad än riktnummer |
||
| 245 | //String lastOrt = ""; |
||
| 246 | String lastNumber = ""; |
||
| 247 | //rota igenom alla rader i html-sourcen |
||
| 248 | for (int i = 0; i < riktnrSource.size(); i++) { |
||
| 249 | String row = (String)riktnrSource.get(i); |
||
| 250 | |||
| 251 | String startstr = "<td><font size=\"2\">"; |
||
| 252 | String endstr = "</font></td>"; |
||
| 253 | |||
| 254 | //kolla om raden innehåller ortsnamn eller riktnummer |
||
| 255 | int start = row.indexOf(startstr); |
||
| 256 | int end = row.indexOf(endstr); |
||
| 257 | if (start > 0 && end > (start + startstr.length())) { |
||
| 258 | String sNumber = row.substring(start + startstr.length(), end); |
||
| 259 | String lastOrt = row.substring(start + startstr.length(), end); |
||
| 260 | int iNumber = 0; |
||
| 261 | try { |
||
| 262 | iNumber = Integer.parseInt(sNumber); |
||
| 263 | } catch (NumberFormatException ex) { |
||
| 264 | } |
||
| 265 | if (iNumber > 0) { |
||
| 266 | lastNumber = sNumber; |
||
| 267 | } else { |
||
| 268 | //då är det väl orsnamn: |
||
| 269 | int riktnummerlength = lastNumber.length(); |
||
| 270 | if (lastNumber.equals(callerPhoneNr.substring(0,riktnummerlength))) { |
||
| 271 | //fixa dash |
||
| 272 | callerPhoneNr = callerPhoneNr.substring(0,riktnummerlength) + "-" + callerPhoneNr.substring(riktnummerlength,callerPhoneNr.length()); |
||
| 273 | |||
| 274 | //byt ut åäöÅÄÖ i lastOrt mot åäü ÅÄÖ |
||
| 275 | lastOrt = replaceSweChar(lastOrt); |
||
| 276 | //spara ortsnamn |
||
| 277 | callerOrtsnamn = lastOrt; |
||
| 278 | |||
| 279 | break; |
||
| 280 | } |
||
| 281 | } |
||
| 282 | } |
||
| 283 | } |
||
| 284 | } |
||
| 285 | } |
||
| 286 | } |
||
| 287 | |||
| 288 | private ArrayList getHTMLSource(String url) { |
||
| 289 | ArrayList returndata = new ArrayList(); |
||
| 290 | |||
| 291 | try { |
||
| 292 | BufferedReader page = new BufferedReader(new InputStreamReader(new URL(url).openStream())); |
||
| 293 | |||
| 294 | String curLine = page.readLine(); |
||
| 295 | while ( curLine != null ) { |
||
| 296 | returndata.add(curLine); |
||
| 297 | // get the next line |
||
| 298 | curLine = page.readLine(); |
||
| 299 | } |
||
| 300 | } |
||
| 301 | catch ( Exception ex ){ |
||
| 302 | //_errors.println("Comunication problem with tv-chart-server, exception: " + ex.getMessage()); |
||
| 303 | |||
| 304 | } |
||
| 305 | |||
| 306 | return returndata; |
||
| 307 | } |
||
| 308 | |||
| 309 | private String parseByte(UByte dobyte) { |
||
| 310 | byte[] dummyByte = new byte[1]; |
||
| 311 | dummyByte[0] = dobyte.byteValue(); |
||
| 312 | |||
| 313 | return new String(dummyByte); |
||
| 314 | |||
| 315 | } |
||
| 316 | |||
| 317 | public String getPhoneNr() { |
||
| 318 | return callerPhoneNr; |
||
| 319 | } |
||
| 320 | public String getName() { |
||
| 321 | return callerName; |
||
| 322 | } |
||
| 323 | public String getAddress() { |
||
| 324 | return callerAddress; |
||
| 325 | } |
||
| 326 | public String getOrtsnamn() { |
||
| 327 | return callerOrtsnamn; |
||
| 328 | } |
||
| 329 | public String getDate() { |
||
| 330 | return callDate; |
||
| 331 | } |
||
| 332 | } |