【问题标题】:How can I get some of the data from the following URL?如何从以下 URL 获取一些数据?
【发布时间】:2017-07-03 23:14:10
【问题描述】:

我想从以下 URL 获取一些数据,如 sunriseTime、outTemp、outsideHumidity 等。如果您知道我该怎么做,请帮助我。

网址 enter link description here

【问题讨论】:

  • 你研究过如何获取网址后面的网站内容吗?
  • 是的,当然,但我无法从那里找到数据,这就是我选择它的原因。如果您想查看该 URL 并给出一些解决方案是这样的:(penteli.meteo.gr/stations/ioannina)
  • Why is “Can someone help me?” not an actual question? 也不是 这里有一个到其他地方的链接。去那边看看我想做什么,然后回来告诉我怎么做。请花一些时间阅读tour 并阅读help center,尤其是How to Ask,然后再在这里发布您的下一个问题。祝你好运。
  • 非常感谢您的回复,并感谢您的回复。但是,因为我是这个网站的新手,更一般地是在编程领域,我不知道你应该提到哪些问题,哪些不应该。另外我不知道在特定情况下使用哪个代码,所以我用这种方式来问我的问题。

标签: java android xml


【解决方案1】:

您需要执行以下操作:

  • 打开网址
  • 阅读网页内容
  • 创建要在数据中找到的模式
  • 使用 Regex(正则表达式)从数据中匹配您想要的模式

我已经编写了一个 Java 程序来执行上述操作。希望对你有帮助:)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


class URLReader {

    public static List<String> getAttributesFromURL(String urlString, 
                                                    String [] keys) {
        StringBuilder sb = new StringBuilder();
        try {

            //Opening the URL
            URL url = new URL(urlString);
            URLConnection urlConnection = url.openConnection();
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(urlConnection.getInputStream()));

            // Reading the URL contents into a StringBuilder object
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                sb.append(line + "\n");
            }
            bufferedReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Copying the StringBuilder contents into a string
        String contents = sb.toString();


        List<String> keyList = Arrays.asList(keys);
        List<String> result = new ArrayList<String>();
        for (String key : keyList) {

            // Defining the pattern to be found in contents
            String patternToFind = key + "=\"(.*)\"";
            Pattern p = Pattern.compile(patternToFind);
            Matcher m = p.matcher(contents);
            if (m.find()) {

                // If pattern found, store them in the result list
                result.add(key + ": " + m.group(1).trim());
            }
        }
        // Returning the result
        return result;
    }
    public static void main(String[] args) throws java.lang.Exception {
        String urlString ="http://www.metar.gr/ws/alexan/ZWNTANA.htm";

        // List all the keys whose values need to be extracted
        String[] keys = {"sunriseTime", "outsideTemp", "outsideHumidity"};

        // Getting the result
        List<String> attributeValuePairs = getAttributesFromURL(urlString, keys);
        System.out.println(attributeValuePairs);
    }
}

上述程序的输出将是:

[sunriseTime: 6:14, outsideTemp: 21.7, outsideHumidity: 57]

你可以通过在程序中keysarray中指定属性名来获取你想要的其他属性的值。

【讨论】:

  • 我使用了你的代码,它没有显示任何问题,但它没有返回任何东西给我。
  • 那是因为我刚刚将结果打印到控制台。如果你运行它,你可以在控制台上看到输出。你能告诉我你是从哪里运行这个程序的吗?
  • 来自我在手机上运行的 Android Studio
  • 你检查控制台了吗?我可以更改程序以返回值的 ArrayList。这会有帮助吗?
  • 我已更改程序以返回值的 ArrayList。请立即运行并检查:)
猜你喜欢
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 2012-07-02
  • 1970-01-01
  • 2011-02-18
相关资源
最近更新 更多