View Javadoc

1   package org.paneris.bibliomania.metasearch.bol;
2   
3   import java.io.File;
4   import java.io.FileNotFoundException;
5   import java.io.IOException;
6   import java.net.URL;
7   import java.util.Enumeration;
8   
9   import org.melati.poem.transaction.ToTidyList;
10  import org.melati.util.IoUtils;
11  import org.melati.util.UTF8URLEncoder;
12  import org.paneris.bibliomania.BookStocking;
13  import org.paneris.bibliomania.metasearch.BOLAndBOBBackendBase;
14  import org.paneris.bibliomania.metasearch.BookPageBase;
15  import org.paneris.bibliomania.metasearch.BookStockingFactory;
16  
17  import com.sleepycat.db.DatabaseException;
18  
19  public class Backend extends BOLAndBOBBackendBase {
20  
21    public Backend(File dbHome, int isbnOfPrdidCacheSize)
22      throws FileNotFoundException, DatabaseException {
23      super(
24        dbHome,
25        "bol_isbnAndImageOfPrdid.db",
26        isbnOfPrdidCacheSize,
27        "http://www.uk.bol.com");
28    }
29  
30    public String productURL_nonaffil(BookStocking stocking) {
31      return "http://www.uk.bol.com/cec/cstage?ecaction=boldlprdview&"
32        + "PrdId="
33        + stocking.getVendorproductid_unsafe();
34    }
35  
36    public byte[] productPage_nonaffil(BookStocking stocking)
37      throws IOException {
38      return IoUtils.slurp(new URL(productURL_nonaffil(stocking)), 32768, 100000);
39    }
40  
41    protected BookPageBase bookPage(byte[] text) {
42      return new BookPage(text);
43    }
44  
45    private int bfmid = 1389056;
46    private int siteid = 29472511;
47  
48    private String bfastURL(String op, String prdId) {
49      return "http://service.bfast.com/bfast/"
50        + op
51        + "?"
52        + "bfmid="
53        + bfmid
54        + "&siteid="
55        + siteid
56        + "&"
57        + "bfpid=0&"
58      + // this must be present but is "internal"
59      // according to Jonathan Kestel of BOL
60      "bfmtype=B&PrdId=" + prdId;
61    }
62  
63    public String notifyOfferedLinkHTML(String prdId) {
64      return "<IMG SRC=\""
65        + bfastURL("serve", prdId)
66        + "\" "
67        + "BORDER=0 WIDTH=1 HEIGHT=1 NOSAVE>";
68    }
69  
70    public String productURL(String prdId) {
71      return bfastURL("click", prdId);
72    }
73  
74    public String productURL(BookStocking stocking) {
75      return productURL(stocking.getVendorproductid_unsafe());
76    }
77  
78    public String notifiedOfferedLinkHTML(BookStocking stocking) {
79      return notifyOfferedLinkHTML(stocking.getVendorproductid_unsafe());
80    }
81  
82    /**
83     * Doesn't work with prdid
84     */
85  
86    public String thumbnailURL(String isbn) {
87      return "http://www.uk.bol.com/multimedia/image/bookcover/"
88        + "thumb"
89        + isbn
90        + ".gif";
91    }
92  
93    public String searchURL(
94      String title,
95      String author,
96      String publisher,
97      String keyword) {
98      return "http://www.uk.bol.com/cec/cstage?ecaction=booksearch"
99        + "&prdTmp=b_src_mainresults_top.uk.htm"
100       + "&startnum=1&increment=20&count=0"
101       + "&query_type=BS_SIMPLE"
102       + "&title_ent="
103       + (title == null ? "" : UTF8URLEncoder.encode(title))
104       + "&author_ent="
105       + (author == null ? "" : UTF8URLEncoder.encode(author))
106       + "&publisher_ent="
107       + (publisher == null ? "" : UTF8URLEncoder.encode(publisher))
108       + "&keyword_ent="
109       + (keyword == null ? "" : UTF8URLEncoder.encode(keyword))
110       + "&keyword_option=ALL_KEYWORDS";
111   }
112 
113   public Enumeration booksMatching(
114     BookStockingFactory stockings,
115     String title,
116     String author,
117     String publisher,
118     String keyword,
119     ToTidyList toTidy)
120     throws IOException {
121 
122     return new SearchResults(
123       IoUtils.slurp(
124         new URL(searchURL(title, author, publisher, keyword)),
125         65536),
126       stockings);
127   }
128 }