根据网站创建应用程序

时间:2014-10-28 16:58:06

标签: javascript android web webview android-webview

我搜索并尝试了很多开发使用网站内容的应用程序。我刚看到StackExchange应用程序,看起来我想开发我的应用程序。 Web和应用程序之间的区别在于:

浏览器:

Browser

应用

App

如您所见,浏览器和应用程序之间存在一些差异。 我希望有人知道如何创建这样的应用程序,因为经过几个小时的搜索后我才发现使用简单的WebView(只是浏览器的1:1)的解决方案,或者在应用程序中使用Javascript来删除一些内容(这实际上有点儿马车......)。

重复:关键是,我想获取网站的内容(在应用程序启动时)并将其放入我的应用程序中。

干杯。

1 个答案:

答案 0 :(得分:1)

你想要做的是通过获取他们的HTML代码并使用某种形式的逻辑对其进行排序来刮掉有问题的网站 - 我为此推荐了xPath。然后你可以将这些数据实现到一些不错的原生界面中。

然而,您需要非常清楚所获得的数据并非总是以您想要的方式形成,因此您的所有算法都必须非常灵活。

过程可以切成这样的步骤

  1. 从网站上检索数据(DefaultHttpClient和AsyncTask)
  2. 分析并检索相关数据(您的相关算法)
  3. 向用户显示数据(您的界面实施)
  4. <强>更新

    Bellow是一些示例代码,用于获取网站的一些数据,它实现了html-cleaner libary,您需要在项目中实现这一点。

    class GetStationsClass extends AsyncTask<String, String, String> {
    
        @Override
        protected String doInBackground(String... params) {
            HttpClient httpclient = new DefaultHttpClient();
            httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
            httpclient.getParams().setParameter(CoreProtocolPNames.HTTP_ELEMENT_CHARSET, "iso-8859-1");
            HttpPost httppost = new HttpPost("http://ntlive.dk/rt/route?id=786");
            httppost.setHeader("Accept-Charset", "iso-8859-1, unicode-1-1;q=0.8");
            try {
    
                // Add your data
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));
    
                // Execute HTTP Post Request
                HttpResponse response = httpclient.execute(httppost);
                int status = response.getStatusLine().getStatusCode();
                String data = "";
                if (status != HttpStatus.SC_OK) {
                    ByteArrayOutputStream ostream = new ByteArrayOutputStream();
                    response.getEntity().writeTo(ostream);
                    data = ostream.toString();
                } else {
                    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(),
                            "iso-8859-1"));
    
                    String line = null;
                    while ((line = reader.readLine()) != null) {
                        data += line;
                    }
                    XPath xpath = XPathFactory.newInstance().newXPath();
                    try {
                        Document document = readDocument(data);
                        NodeList nodes = (NodeList) xpath.evaluate("//*[@id=\"container\"]/ul/li", document,
                                XPathConstants.NODESET);
                        for (int i = 0; i < nodes.getLength(); i++) {
                            Node thisNode = nodes.item(i);
                            Log.v("",thisNode.getTextContent().trim);
                        }
                    } catch (XPathExpressionException e) {
                        e.printStackTrace();
                    }
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
             //update user interface here
        }
    
    }
    
    private Document readDocument(String content) {
        Long timeStart = new Date().getTime();
        TagNode tagNode = new HtmlCleaner().clean(content);
    
        Document doc = null;
        try {
            doc = new DomSerializer(new CleanerProperties()).createDOM(tagNode);
            return doc;
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        return doc;
    }
    

    运行上面的代码

    new getStationsClass.execute();