Ticket #1808: Diff-mainichi-translator.patch

File Diff-mainichi-translator.patch, 3.4 KB (added by fbennett, 6 years ago)
  • translators/Mainichi

     
    33        "translatorType":4, 
    44        "label":"Mainichi Daily News", 
    55        "creator":"Frank Bennett", 
    6         "target":"^http://(?:search\\.)*mdn\\.mainichi\\.jp/(?:$|result\\?|mdnnews/|perspectives/|features/|arts/|travel/)", 
     6        "target":"^http://(?:search\\.)*(mdn\\.)*mainichi\\.jp/(?:$|result\\?|[a-z][a-z]+)", 
    77        "minVersion":"2.0b7", 
    88        "maxVersion":"", 
    99        "priority":100, 
    1010        "inRepository":true, 
    11         "lastUpdated":"2010-06-05 20:35:00" 
     11        "lastUpdated":"2011-03-31 20:35:00" 
    1212} 
    1313 
    1414// ################################# 
    1515// #### Local utility functions #### 
    1616// ################################# 
    1717 
    18 var itemRe = new RegExp('.*/([0-9]{8})[a-z]{1}[0-9]{1}[a-z]{1}[0-9]{2}[a-z]{1}[0-9]{1}[a-z]{2}[0-9]{6}c\.html'); 
     18var itemRe = new RegExp('.*/[a-z]*([0-9]{8})([a-z0-9]+)c\.html'); 
    1919 
     20var searchRe = new RegExp('/result\?'); 
     21 
    2022var getResolver = function (doc) { 
    2123        var namespace, resolver; 
    2224        namespace = doc.documentElement.namespaceURI; 
     
    4951// ######################### 
    5052 
    5153var detectWeb = function (doc, url) { 
    52         if (itemRe.test(doc.location.href)) { 
    53                 return "newspaperArticle"; 
    54         } else { 
     54        if (itemRe.test(url)) { 
     55                var news = doc.getElementsByClassName("NewsBody"); 
     56                if (news && news.length) { 
     57                        return "newspaperArticle"; 
     58                } 
     59        } else if (searchRe.test(url)) { 
    5560                return "multiple"; 
    5661        } 
    5762} 
     
    8388                        items = Zotero.selectItems(availableItems); 
    8489                        for (myurl in items) { 
    8590                                if (items.hasOwnProperty(myurl)) { 
    86                                         scrapeAndParse(myurl, availableItems[myurl]); 
     91                                        scrapeAndParse(doc, availableItems[myurl]); 
    8792                                } 
    8893                        } 
    8994                } 
     
    9398                title = nodes.iterateNext(); 
    9499                if (title) { 
    95100                        title = cleanUp(title.textContent); 
    96                         scrapeAndParse(url, title); 
     101                        scrapeAndParse(doc, title); 
    97102                } 
    98103        } 
    99104}; 
     
    102107// ##### Scraper function ##### 
    103108// ############################ 
    104109 
    105 var scrapeAndParse = function (url, title) { 
     110var scrapeAndParse = function (doc, title) { 
    106111        var item, mytxt, m, val; 
    107112        item = new Zotero.Item("newspaperArticle"); 
    108113        item.title = title; 
    109114        item.publicationTitle = "Mainichi Daily News"; 
    110115        item.edition = "online edition"; 
    111         item.url = url; 
    112         m = itemRe.exec(url); 
     116        item.url = doc.location.href; 
     117 
     118        var date = ""; 
     119        m = item.url.match(itemRe); 
    113120        if (m) { 
    114121                var year = m[1].slice(0,4); 
    115122                var month = m[1].slice(4,6); 
    116123                var day = m[1].slice(6,8); 
    117                 item.date = [year, month, day].join("-"); 
     124                var date = [year, month, day].join("-"); 
     125                item.date = date; 
     126                date = ", " + date; 
    118127        } 
    119         item.attachments.push({title:"Mainichi Daily News snapshot", mimeType:"text/html", url:url}); 
     128 
     129        // Use DOM methods to grab elements and wrap in a new document. 
     130        var newDoc = false; 
     131        var label = "Mainichi Shimbun content" + date 
     132        var article = doc.getElementsByClassName("NewsArticle"); 
     133        if (article && article.length) { 
     134                newDoc = Zotero.Utilities.composeDOM(doc, label, article); 
     135        } else { 
     136                var title = doc.getElementsByClassName("NewsTitle"); 
     137                var body = doc.getElementsByClassName("NewsBody"); 
     138                newDoc = Zotero.Utilities.composeDOM(doc, label, [title, body]); 
     139        } 
     140        if (newDoc) { 
     141                item.attachments.push({ 
     142                                title: "Mainichi article content", 
     143                                document:newDoc, 
     144                                snapshot: true 
     145        }); 
     146        } 
    120147        item.complete(); 
    121148};