// Path: app/src/main/java/com/github/mzule/androidweekly/entity/Article.java
// public class Article implements Serializable {
//     private String title;
//     private String brief;
//     private String link;
//     private String imageUrl;
//     private String domain;
//     private String issue;
//     private String section;
// 
//     public String getSection() {
//         return section;
//     }
// 
//     public void setSection(String section) {
//         this.section = section;
//     }
// 
//     public String getIssue() {
//         return issue;
//     }
// 
//     public void setIssue(String issue) {
//         this.issue = issue;
//     }
// 
//     public String getTitle() {
//         return title;
//     }
// 
//     public void setTitle(String title) {
//         this.title = title;
//     }
// 
//     public String getBrief() {
//         return brief;
//     }
// 
//     public void setBrief(String brief) {
//         this.brief = brief;
//     }
// 
//     public String getLink() {
//         return link;
//     }
// 
//     public void setLink(String link) {
//         this.link = link;
//     }
// 
//     public String getImageUrl() {
//         return imageUrl;
//     }
// 
//     public void setImageUrl(String imageUrl) {
//         this.imageUrl = imageUrl;
//     }
// 
//     public String getDomain() {
//         return domain;
//     }
// 
//     public void setDomain(String domain) {
//         this.domain = domain;
//     }
// 
//     public String getFTS() {
//         return title + "\n" + brief;
//     }
// 
//     @Override
//     public String toString() {
//         return Arrays.toString(new String[]{title, "\n", brief, "\n", link, "\n", imageUrl, "\n", domain, "\n", "\n"});
//     }
// 
//     @Override
//     public int hashCode() {
//         return link == null ? 0 : link.hashCode();
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (o instanceof Article) {
//             Article other = (Article) o;
//             return link == null ? other.link == null : link.equals(other.link);
//         }
//         return false;
//     }
// }


import com.github.mzule.androidweekly.entity.Article;
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;

    @Override
    public List<Object> parse(String issue) throws IOException {
        Document doc = DocumentProvider.get(issue);
        List<Object> articles = new ArrayList<>();
        Elements tables = doc.getElementsByTag("table");
        String currentSection = null;
        for (Element e : tables) {
            Elements h2 = e.getElementsByTag("h2");
            Elements h5 = e.getElementsByTag("h5");// 兼容issue-226 SPONSORED 在 h5 标签里面
            if (!h2.isEmpty() || !h5.isEmpty()) {
                currentSection = h2.size() > 0 ? h2.get(0).text() : h5.get(0).text();
                if (!articles.contains(currentSection)) {
                    articles.add(currentSection);
                }
            } else {
                Elements tds = e.getElementsByTag("td");
                Element td = tds.get(tds.size() - 2);
                String imageUrl = null;
                if (tds.size() == 4) {
                    imageUrl = tds.get(0).getElementsByTag("img").get(0).attr("src");
                }
                String title = td.getElementsByClass("article-headline").get(0).text();
                String brief = td.getElementsByTag("p").get(0).text();
                String link = td.getElementsByClass("article-headline").get(0).attr("href");
                String domain = td.getElementsByTag("span").get(0).text().replace("(", "").replace(")", "");
                if (issue == null) {
                    String number = doc.getElementsByClass("issue-header").get(0).getElementsByTag("span").get(0).text();
                    issue = "/issues/issue-" + number.replace("#", "");
                }
// Path: app/src/main/java/com/github/mzule/androidweekly/entity/Article.java
// public class Article implements Serializable {
//     private String title;
//     private String brief;
//     private String link;
//     private String imageUrl;
//     private String domain;
//     private String issue;
//     private String section;
// 
//     public String getSection() {
//         return section;
//     }
// 
//     public void setSection(String section) {
//         this.section = section;
//     }
// 
//     public String getIssue() {
//         return issue;
//     }
// 
//     public void setIssue(String issue) {
//         this.issue = issue;
//     }
// 
//     public String getTitle() {
//         return title;
//     }
// 
//     public void setTitle(String title) {
//         this.title = title;
//     }
// 
//     public String getBrief() {
//         return brief;
//     }
// 
//     public void setBrief(String brief) {
//         this.brief = brief;
//     }
// 
//     public String getLink() {
//         return link;
//     }
// 
//     public void setLink(String link) {
//         this.link = link;
//     }
// 
//     public String getImageUrl() {
//         return imageUrl;
//     }
// 
//     public void setImageUrl(String imageUrl) {
//         this.imageUrl = imageUrl;
//     }
// 
//     public String getDomain() {
//         return domain;
//     }
// 
//     public void setDomain(String domain) {
//         this.domain = domain;
//     }
// 
//     public String getFTS() {
//         return title + "\n" + brief;
//     }
// 
//     @Override
//     public String toString() {
//         return Arrays.toString(new String[]{title, "\n", brief, "\n", link, "\n", imageUrl, "\n", domain, "\n", "\n"});
//     }
// 
//     @Override
//     public int hashCode() {
//         return link == null ? 0 : link.hashCode();
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (o instanceof Article) {
//             Article other = (Article) o;
//             return link == null ? other.link == null : link.equals(other.link);
//         }
//         return false;
//     }
// }


// Path: app/src/main/java/com/github/mzule/androidweekly/api/parser/FresherArticlesParser.java
import com.github.mzule.androidweekly.entity.Article;
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;


    @Override
    public List<Object> parse(String issue) throws IOException {
        Document doc = DocumentProvider.get(issue);
        List<Object> articles = new ArrayList<>();
        Elements tables = doc.getElementsByTag("table");
        String currentSection = null;
        for (Element e : tables) {
            Elements h2 = e.getElementsByTag("h2");
            Elements h5 = e.getElementsByTag("h5");// 兼容issue-226 SPONSORED 在 h5 标签里面
            if (!h2.isEmpty() || !h5.isEmpty()) {
                currentSection = h2.size() > 0 ? h2.get(0).text() : h5.get(0).text();
                if (!articles.contains(currentSection)) {
                    articles.add(currentSection);
                }
            } else {
                Elements tds = e.getElementsByTag("td");
                Element td = tds.get(tds.size() - 2);
                String imageUrl = null;
                if (tds.size() == 4) {
                    imageUrl = tds.get(0).getElementsByTag("img").get(0).attr("src");
                }
                String title = td.getElementsByClass("article-headline").get(0).text();
                String brief = td.getElementsByTag("p").get(0).text();
                String link = td.getElementsByClass("article-headline").get(0).attr("href");
                String domain = td.getElementsByTag("span").get(0).text().replace("(", "").replace(")", "");
                if (issue == null) {
                    String number = doc.getElementsByClass("issue-header").get(0).getElementsByTag("span").get(0).text();
                    issue = "/issues/issue-" + number.replace("#", "");
                }
                Article article = new Article();