使用jsou代替API获取数据

来源:互联网 发布:说明域名注册的流程 编辑:程序博客网 时间:2024/06/07 02:12

jsoup是一个强大的可以将网页html数据进行解析,这样没有API接口的情况下,也可以获取数据了。具体的用法,可取参照jsoup官方文档。

以下是使用jsoup的简单实例:


package cn.sharesdk.demo;import android.app.ProgressDialog;import android.os.AsyncTask;import android.os.Bundle;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.view.animation.AccelerateDecelerateInterpolator;import android.widget.ListView;import android.widget.ProgressBar;import com.zhy.adapter.recyclerview.wrapper.LoadMoreWrapper;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;import java.io.IOException;import java.util.ArrayList;import java.util.List;import cn.sharesdk.framework.ShareSDK;import cn.sharesdk.onekeyshare.OnekeyShare;public class MainActivity extends AppCompatActivity {    String url = "http://www.qiushibaike.com/8hr/page/";    private int pageNum = 1;//    private List<DataEntity> mDatas = new ArrayList<>();    private List<BaseEntity> mDatas = new ArrayList<>();    private SwipeRefreshLayout mSwipe;    private ListView mListView;    private ProgressDialog mDialog;    private MyAdapter mAdapter;    private RecyclerView mRecyclerView;    private RvAdapter rvAdapter;    private LoadMoreWrapper mLoadMoreWrapper;    private ProgressBar mProgressBar;    @Override    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ShareSDK.initSDK(this);setContentView(R.layout.activity_main);initView();initData();initListener();    }    @Override    protected void onDestroy() {super.onDestroy();ShareSDK.stopSDK(this);    }    private void initListener() {mSwipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {    @Override    public void onRefresh() {mDatas.clear();pageNum = 1;initData();    }});    }    private void initView() {mSwipe = (SwipeRefreshLayout) findViewById(R.id.swipe);//mListView = (ListView) findViewById(R.id.listView);//mListView.setDivider(null);//mAdapter = new MyAdapter(this, mDatas);//mAdapter.openAnimation(new ScaleAnimator());//mListView.setAdapter(mAdapter);mRecyclerView = (RecyclerView) findViewById(R.id.rv);mRecyclerView.setLayoutManager(new LinearLayoutManager(this));rvAdapter = new RvAdapter(this, mDatas);rvAdapter.openAnimation(new ScaleAnimator());mLoadMoreWrapper = new LoadMoreWrapper(rvAdapter);if (mProgressBar == null)mProgressBar = new ProgressBar(this);mProgressBar.setInterpolator(new AccelerateDecelerateInterpolator());isShowLoadMore();mLoadMoreWrapper.setOnLoadMoreListener(new LoadMoreWrapper.OnLoadMoreListener() {    @Override    public void onLoadMoreRequested() {pageNum++;initData();    }});mRecyclerView.setAdapter(mLoadMoreWrapper);    }    private void isShowLoadMore() {if (mDatas.size() > 0) mLoadMoreWrapper.setLoadMoreView(mProgressBar);    }    public void updateView() {isShowLoadMore();mLoadMoreWrapper.notifyDataSetChanged();mSwipe.setRefreshing(false);    }    private void initData() {new AsyncTask<String,Void,List<BaseEntity>>() {    @Override    protected List<BaseEntity> doInBackground(String... params) {return handleData(params);    }    @Override    protected void onPreExecute() {super.onPreExecute();//mSwipe.setRefreshing(true);if (mDialog == null) {    mDialog = new ProgressDialog(MainActivity.this);    mDialog.setTitle("加载中...");    mDialog.show();}    }    @Override    protected void onPostExecute(List<BaseEntity> dataEntities) {if (mDialog != null) {    mDialog.dismiss();}//mDatas.clear();mDatas.addAll(dataEntities);updateView();    }}.execute(new String[]{url});    }    private List<BaseEntity> handleData(String[] params) {List<BaseEntity> dataEntities = new ArrayList<>();String url = params[0];try {Document document = Jsoup.connect(url + pageNum + "/").get();Elements elements = document.select("a.contentHerf");Elements elements_author = document.select("div.author.clearfix");Elements elements_stats = document.select("div.stats");//                            Log.d("HTML内容","HTML内容:" + elements.toString());for (int j = 0; j < elements.size(); j++) {    DataEntity dataEntity = new DataEntity();    Element element = elements.get(j);    Element element_author = elements_author.get(j);    Element element_stats = elements_stats.get(j);    Elements herefs = element_author.select("a[href]");    Element level_women = element_author    .select("div.articleGender.womenIcon")    .first();    Element level_man = element_author    .select("div.articleGender.manIcon")    .first();    Elements numbers = element_stats.select("i.number");    if (numbers != null && numbers.size() >= 2) {Log.d("HTML内容", "好笑数:" + numbers.get(0).text());Log.d("HTML内容", "评论数:" + numbers.get(1).text());dataEntity.setFunnyNum(numbers       .get(0)       .text());dataEntity.setCommentNum(numbers .get(1) .text());    }    Element href_comment = element_stats    .select("a[href]")    .first();    String hrefComment = null;    if (href_comment != null) {hrefComment = href_comment.attr("href");    }    Log.d("HTML内容", "评论链接:" + "http://www.qiushibaike.com/8hr/page/" + pageNum + hrefComment);    dataEntity.setCommentLink("http://www.qiushibaike.com/8hr/page/" + pageNum + hrefComment);    for (int k = 0; k < herefs.size(); k++) {Element herefElement = herefs.get(k);String href = herefElement.attr("href");Log.d("HTML内容", "标题头链接:" + href);dataEntity.setTitleLink("http://www.qiushibaike.com/8hr/page/" + pageNum + href);Element img = herefElement.select("img").first();String title = herefElement.attr("title");if (TextUtils.isEmpty(title)) {    String src = img.attr("src");    Log.d("HTML内容", "标题头图片:" + src);    dataEntity.setTitleIcon(src);} else {    Log.d("HTML内容", "标题头标题:" + title);    dataEntity.setTitleName(title);}    }    String level = null;    if (level_women != null) {Log.d("HTML内容", "标题头等级:women" + level_women.text());dataEntity.setSex("0"); //设置性别,女为0,男为1level = level_women.text();    } else if (level_man != null) {Log.d("HTML内容", "标题头等级:man" + level_man.text());dataEntity.setSex("1");level = level_man.text();    }    dataEntity.setLevel(level);    Log.d("HTML内容", "标题:" + element.text());    dataEntity.setContent(element.text());    //                                Log.d("HTML内容","标题头:" + element_author.text());    String href = element.attr("href");    //                                Log.d("HTML内容","详情链接:" + href);    Document detail_Document = Jsoup    .connect("http://www.qiushibaike.com" + href)    .get();    Elements text_detail = detail_Document.select(".content");    //                                Log.d("HTML内容","详情内容:" + text_detail.text());    Elements pic_detail = text_detail.select(".thumb img[src$=jpg]");    if (!pic_detail.isEmpty()) {String src = pic_detail.attr("src");//                                    Log.d("HTML内容","详情图片:" + src);    } else {//                                    Log.d("HTML内容","详情图片:" + "no");    }    dataEntities.add(dataEntity);}} catch (IOException e) {    e.printStackTrace();}return dataEntities;    }    public void click(View view) {OnekeyShare onekeyShare = new OnekeyShare();onekeyShare.setTitle("趣分享");onekeyShare.setText("我为技术带盐,我骄傲,我自豪");onekeyShare.setImageUrl("http://7sby7r.com1.z0.glb.clouddn.com/CYSJ_02.jpg");onekeyShare.setTitleUrl("http://wwww.baidu.com");onekeyShare.show(MainActivity.this);//        Intent intent = new Intent(Intent.ACTION_SEND);//        intent.setType("text/plain");//        intent.putExtra(Intent.EXTRA_SUBJECT, "我为技术带盐,我骄傲,我自豪");//        intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.share_contents, "趣分享", "http://wwww.baidu.com"));//        startActivity(Intent.createChooser(intent, getTitle()));    }}





0 0
原创粉丝点击