1 package org.varienaja.comments;
2
3 import java.text.DateFormat;
4 import java.text.ParseException;
5 import java.text.SimpleDateFormat;
6 import java.util.Date;
7 import java.util.LinkedList;
8 import java.util.List;
9
10 import org.apache.log4j.Logger;
11 import org.musicontroller.core.Playlist;
12 import org.varienaja.amazon.AmazonService;
13
14 import com.amazon.webservices.AWSECommerceService.CustomerReviews;
15 import com.amazon.webservices.AWSECommerceService.EditorialReview;
16 import com.amazon.webservices.AWSECommerceService.Item;
17
18 public class AmazonCommentService {
19 private static final Logger log = Logger.getLogger(AmazonCommentService.class);
20 private static final String AMAZONDATEFORMAT = "yyyy-MM-dd";
21
22
23
24
25
26
27 private List<Object> getAmazonComments(Playlist playlist) {
28 List<Object> result = new LinkedList<Object>();
29 AmazonService service = new AmazonService();
30 try {
31 for (Item item : service.searchReviews(playlist.getSongs().iterator().next().getSong().getBand().getName(),playlist.getName())) {
32 CustomerReviews erss = item.getCustomerReviews();
33 if (erss!=null) {
34 com.amazon.webservices.AWSECommerceService.Review[] ers = erss.getReview();
35 for (com.amazon.webservices.AWSECommerceService.Review er : ers) {
36 result.add(er);
37 }
38 }
39 EditorialReview[] ervs = item.getEditorialReviews();
40 if (ervs!=null) {
41 for (EditorialReview er : ervs) {
42 result.add(er);
43 }
44 }
45 }
46 } catch (Exception e) {
47 log.error("Error searching Amazon: "+e);
48 }
49 return result;
50 }
51
52
53
54
55
56
57
58 public List<Comment> getComments(Playlist playlist) {
59 List<Comment> reviews = new LinkedList<Comment>();
60 for (Object rv : getAmazonComments(playlist)) {
61 DateFormat df = new SimpleDateFormat(AMAZONDATEFORMAT);
62 if (rv instanceof com.amazon.webservices.AWSECommerceService.Review) {
63 com.amazon.webservices.AWSECommerceService.Review r = (com.amazon.webservices.AWSECommerceService.Review) rv;
64 try {
65 String source = "http://www.amazon.com/dp/"+r.getASIN();
66 Comment review = new Comment(source ,r.getSummary(),df.parse(r.getDate()));
67
68 CommentElement element = new CommentElement();
69 element.setText(r.getContent());
70 element.setType('T');
71 review.addElement(element);
72 reviews.add(review);
73 } catch (ParseException e) {
74 log.error("Error parsing date "+r.getDate()+" with format: "+AMAZONDATEFORMAT);
75 }
76 } else if (rv instanceof EditorialReview) {
77 EditorialReview er = (EditorialReview) rv;
78 Comment review = new Comment("www.amazon.com ",er.getSource(),new Date(0));
79
80 CommentElement element = new CommentElement();
81 element.setText(er.getContent());
82 element.setType('T');
83 review.addElement(element);
84 reviews.add(review);
85 }
86 }
87 if (reviews.size()>0) {
88 log.debug("Downloaded "+reviews.size()+" comments from amazon.com");
89 }
90 return reviews;
91 }
92 }