Hi grday, This is what I use to query PSKReporter. It is written in java, and shouldn't be too difficult to convert. I use this to color the callsigns which receive me. You may contact me off list if you need further info, or help.
73's and a happy new year, 73's Erik ON4PB ------------------------------- // see https://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/ package TX; import clubLog.CountryRegistry.CountryInfo; import common.Constants; import common.HamUtils; import static common.HamUtils.distance; import static wsjtx.main.MainController.heardMeMap; import generated.TX.ReceptionReports; import generated.TX.ReceptionReports.ReceptionReport; import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.Unmarshaller; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.List; import java.util.logging.Logger; import javax.xml.transform.stream.StreamSource; import wsjtx.main.HeardMeInstance; import static wsjtx.main.MainController.countryRegistry; public class QueryPSKReporter { static final Logger logger = Logger.getLogger(QueryPSKReporter.class.getName()); // see https://pskreporter.info/pskdev.html for developers // String url = "http://retrieve.pskreporter.info/query?senderCallsign=on4pb"; // String url = "http://retrieve.pskreporter.info/query?senderCallsign=on4pb&flowStartSecond s=-43200"; // 12 hours private final String USER_AGENT = "Mozilla/5.0"; // private final CountryRegistry countryRegistry = new CountryRegistry(); // HTTP GET request public void sendGet() { URL obj; try { obj = new URL(Constants.PSK_REPORTER_URL); } catch (MalformedURLException ex) { logger.severe("MalformedURLException : " + ex.getMessage()); return; } HttpURLConnection con; try { con = (HttpURLConnection) obj.openConnection(); } catch (IOException ex) { logger.severe("IOException when opening : " + ex.getMessage()); return; } try { // optional default is GET con.setRequestMethod("GET"); } catch (ProtocolException ex) { logger.severe("ProtocolException : " + ex.getMessage()); return; } //add request header con.setRequestProperty("User-Agent", USER_AGENT); int responseCode = 0; StringBuilder response = null; try { responseCode = con.getResponseCode(); logger.fine("Sending 'GET' request to URL : " + Constants.PSK_REPORTER_URL); // 200 is ok if (responseCode != 200) { logger.info("Get error : " + responseCode); return; } } catch (Exception ex) { logger.severe("Exception in get : " + ex.getMessage()); return; } try { BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; response = new StringBuilder(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); } catch (Exception ex) { logger.severe("Exception in reading : " + ex.getMessage()); return; } if (response != null) { logger.fine("Response : " + response.toString()); ReceptionReports receptionReports = null; try { JAXBContext jaxbContext = JAXBContext.newInstance(ReceptionReports.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); receptionReports = (ReceptionReports) jaxbUnmarshaller.unmarshal(new StreamSource(new StringReader(response.toString()))); } // catch (JAXBException e) catch (Exception e) { logger.severe("Exception : " + e.getMessage()); logger.severe("PSK Reporter Response : " + response.toString()); return; } List<ReceptionReport> receptionReportList = receptionReports.getReceptionReport(); logger.info("Nr of elements retrieved : " + receptionReportList.size() + " at : " + new Date()); heardMeMap.clear(); for (ReceptionReport item : receptionReportList) { // <receptionReport receiverCallsign="DG0OPK" receiverLocator="JO50gq87" senderCallsign="ON4PB" senderLocator="JO20oh09" frequency="18101263" // flowStartSeconds="1536838655" mode="FT8" isSender="1" receiverDXCC="Fed. Rep. of Germany" receiverDXCCCode="DL" senderLotwUpload="2018-07-23" sNR="-20"/> logger.fine("receiver callsign : " + item.getReceiverCallsign() + ", receiver locator : " + item.getReceiverLocator() + ", senderCallsign : " + item.getSenderCallsign() + ", frequency : " + item.getFrequency() + ", flowStartSeconds : " + item.getFlowStartSeconds() + ", mode : " + item.getMode() + ", receiver DXCC : " + item.getReceiverDXCC() + ", receiverDXCCCode : " + item.getReceiverDXCCCode() + ", SNR : " + item.getSNR()); if (item.getSenderCallsign().equals(Constants.MY_CALLSIGN)) { // can be null by PSKreporter if ((item.getReceiverCallsign() != null) && (item.getFrequency() != null) && (item.getSNR() != null)) { // only store callsigns for valid countries DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); CountryInfo countryInfo = countryRegistry.lookup(item.getReceiverCallsign(), LocalDateTime.now().format(formatter)); if (!countryInfo.name().equals("INVALID")) { // flowStartSeconds is UTC long myTXReceivedAt = item.getFlowStartSeconds() * 1000; Reporter.addTX(myTXReceivedAt, item.getReceiverCallsign(), item.getReceiverLocator(), item.getReceiverDXCC(), item.getReceiverDXCCCode(), item.getSNR(), item.getMode(), (long) item.getFrequency(), countryInfo.name(), countryInfo.dxcc(), distance(Constants.HOME_LAT, Constants.HOME_LON, countryInfo.latitude(), countryInfo.longitude(), "K")); // the lifetime of the map is the time we color the callsigns HeardMeInstance heardMeInstance = new HeardMeInstance(myTXReceivedAt, HamUtils.convertBandFromLToS((long) item.getFrequency())); heardMeMap.put(item.getReceiverCallsign(), heardMeInstance); } } } else { logger.severe("Sender callsign is not mine : " + item.getSenderCallsign()); } } } } } _______________________________________________ wsjt-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/wsjt-devel
