forked from pknotfound/OpenGraphParser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJsoupNetworkCall.kt
More file actions
96 lines (81 loc) · 3.28 KB
/
JsoupNetworkCall.kt
File metadata and controls
96 lines (81 loc) · 3.28 KB
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
package com.kedia.ogparser
import android.util.Log
import org.jsoup.Jsoup
/**
* @param timeout - Timeout for requests, specified in milliseconds (default - 60000)
* @param jsoupProxy - Specify proxy for requests (host, port)
* @param maxBodySize - The maximum size to fetch for body
*/
class JsoupNetworkCall(
private val timeout: Int? = DEFAULT_TIMEOUT,
private val jsoupProxy: JsoupProxy? = null,
private val maxBodySize: Int? = null
) {
fun callUrl(url: String, agent: String): OpenGraphResult? {
val openGraphResult = OpenGraphResult()
try {
val connection = Jsoup.connect(url)
.ignoreContentType(true)
.userAgent(agent)
.referrer(REFERRER)
.timeout(timeout ?: DEFAULT_TIMEOUT)
.followRedirects(true)
jsoupProxy?.let { connection.proxy(it.host, it.port) }
maxBodySize?.let { connection.maxBodySize(it) }
val response = connection.execute()
val doc = response.parse()
val ogTags = doc.select(DOC_SELECT_OGTAGS)
ogTags.forEach { tag ->
val text = tag.attr(PROPERTY)
when (text) {
OG_IMAGE -> {
openGraphResult.image = tag.attr(OPEN_GRAPH_KEY)
}
OG_DESCRIPTION -> {
openGraphResult.description = tag.attr(OPEN_GRAPH_KEY)
}
OG_URL -> {
openGraphResult.url = tag.attr(OPEN_GRAPH_KEY)
}
OG_TITLE -> {
openGraphResult.title = tag.attr(OPEN_GRAPH_KEY)
}
OG_SITE_NAME -> {
openGraphResult.siteName = tag.attr(OPEN_GRAPH_KEY)
}
OG_TYPE -> {
openGraphResult.type = tag.attr(OPEN_GRAPH_KEY)
}
}
}
if (openGraphResult.title.isNullOrEmpty()) {
openGraphResult.title = doc.title()
}
if (openGraphResult.description.isNullOrEmpty()) {
val docSelection = doc.select(DOC_SELECT_DESCRIPTION)
openGraphResult.description = docSelection.firstOrNull()?.attr("content") ?: ""
}
if (openGraphResult.url.isNullOrEmpty()) {
openGraphResult.url = getBaseUrl(url)
}
} catch (e: Exception) {
e.printStackTrace()
return null
}
return openGraphResult
}
companion object {
private const val REFERRER = "http://www.google.com"
private const val DEFAULT_TIMEOUT = 60000
private const val DOC_SELECT_OGTAGS = "meta[property^=og:]"
private const val DOC_SELECT_DESCRIPTION = "meta[name=description]"
private const val OPEN_GRAPH_KEY = "content"
private const val PROPERTY = "property"
private const val OG_IMAGE = "og:image"
private const val OG_DESCRIPTION = "og:description"
private const val OG_URL = "og:url"
private const val OG_TITLE = "og:title"
private const val OG_SITE_NAME = "og:site_name"
private const val OG_TYPE = "og:type"
}
}