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

Reply via email to