aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/impl/replacement/viddler/ReplacementServiceViddlerImpl.java
blob: 8bda8653c29392e4e1b565fa3480fa66ef87f5af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
 * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
 *
 * Distributable under LGPL license. See terms of license at gnu.org.
 */
package net.java.sip.communicator.impl.replacement.viddler;

import java.io.*;
import java.net.*;

import net.java.sip.communicator.service.replacement.*;
import net.java.sip.communicator.util.*;

/**
 * Implements the {@link ReplacementService} to provide previews for Viddler
 * links.
 *
 * @author Purvesh Sahoo
 */
public class ReplacementServiceViddlerImpl
    implements ReplacementService
{
    /**
     * The logger for this class.
     */
    private static final Logger logger =
        Logger.getLogger(ReplacementServiceViddlerImpl.class);

    /**
     * The regex used to match the link in the message.
     */
    public static final String VIDDLER_PATTERN =
        "(?<=>)(http:\\/\\/(?:www\\.)?viddler\\.com"
        + "\\/explore\\/(\\w+)\\/videos\\/\\d+.*(?=<\\/A>))";

    /**
     * API Key required to access the viddler api.
     */
    private static final String API_KEY = "1bi6ckuzmklyaqseiqtl";

    /**
     * Viddler API url.
     */
    private static final String sourceURL =
        "http://api.viddler.com/rest/v1/"
        + "?method=viddler.videos.getDetailsByUrl&api_key="
        + API_KEY;

    /**
     * Configuration label shown in the config form.
     */
    public static final String VIDDLER_CONFIG_LABEL = "Viddler";

    /**
     * Source name; also used as property label.
     */
    public static final String SOURCE_NAME = "VIDDLER";

    /**
     * Constructor for <tt>ReplacementServiceViddlerImpl</tt>.
     */
    public ReplacementServiceViddlerImpl()
    {
        logger.trace("Creating a Viddler Source.");
    }

    /**
     * Returns the thumbnail URL of the video link provided.
     *
     * @param sourceString the original video link.
     * @return the thumbnail image link; the original link in case of no match.
     */
    public String getReplacement(String sourceString)
    {
        try
        {
            String url = sourceURL + "&url=" + sourceString + "/";

            URL sourceURL = new URL(url);
            URLConnection conn = sourceURL.openConnection();

            BufferedReader in =
                new BufferedReader(new InputStreamReader(conn
                    .getInputStream()));

            String inputLine;
            StringBuffer holder = new StringBuffer();

            while ((inputLine = in.readLine()) != null)
                holder.append(inputLine);
            in.close();

            String startTag = "<thumbnail_url>";
            String endTag = "</thumbnail_url>";

            String response = holder.toString();

            int start = response.indexOf(startTag) + startTag.length();
            int end = response.toString().indexOf(endTag);
            String thumbUrl = response.substring(start, end);

            if (thumbUrl != null)
            {
                return thumbUrl;
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        return sourceString;
    }

    /**
     * Returns the source name
     *
     * @return the source name
     */
    public String getSourceName()
    {
        return SOURCE_NAME;
    }

    /**
     * Returns the pattern of the source
     *
     * @return the source pattern
     */
    public String getPattern()
    {
        return VIDDLER_PATTERN;
    }
}