Skip to content

Commit 28e1ed5

Browse files
committed
added support for twitter links
1 parent 7521bac commit 28e1ed5

4 files changed

Lines changed: 100 additions & 49 deletions

File tree

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.kedia.ogparser
2+
3+
import kotlinx.coroutines.Dispatchers
4+
import kotlinx.coroutines.launch
5+
import org.jsoup.Jsoup
6+
7+
class JsoupNetworkCall {
8+
9+
private val REFERRER = "http://www.google.com"
10+
private val TIMEOUT = 10000
11+
private val DOC_SELECT_QUERY = "meta[property^=og:]"
12+
private val OPEN_GRAPH_KEY = "content"
13+
private val PROPERTY = "property"
14+
private val OG_IMAGE = "og:image"
15+
private val OG_DESCRIPTION = "og:description"
16+
private val OG_URL = "og:url"
17+
private val OG_TITLE = "og:title"
18+
private val OG_SITE_NAME = "og:site_name"
19+
private val OG_TYPE = "og:type"
20+
21+
private var openGraphResult: OpenGraphResult? = null
22+
23+
fun callUrl(url: String, agent: String): OpenGraphResult? {
24+
openGraphResult = OpenGraphResult()
25+
try {
26+
val response = Jsoup.connect(url)
27+
.ignoreContentType(true)
28+
.userAgent(agent)
29+
.referrer(REFERRER)
30+
.timeout(TIMEOUT)
31+
.followRedirects(true)
32+
.execute()
33+
34+
val doc = response.parse()
35+
36+
val ogTags = doc.select(DOC_SELECT_QUERY)
37+
when {
38+
ogTags.size > 0 ->
39+
ogTags.forEachIndexed { index, _ ->
40+
val tag = ogTags[index]
41+
val text = tag.attr(PROPERTY)
42+
43+
when (text) {
44+
OG_IMAGE -> {
45+
openGraphResult!!.image = (tag.attr(OPEN_GRAPH_KEY))
46+
}
47+
OG_DESCRIPTION -> {
48+
openGraphResult!!.description = (tag.attr(OPEN_GRAPH_KEY))
49+
}
50+
OG_URL -> {
51+
openGraphResult!!.url = (tag.attr(OPEN_GRAPH_KEY))
52+
}
53+
OG_TITLE -> {
54+
openGraphResult!!.title = (tag.attr(OPEN_GRAPH_KEY))
55+
}
56+
OG_SITE_NAME -> {
57+
openGraphResult!!.siteName = (tag.attr(OPEN_GRAPH_KEY))
58+
}
59+
OG_TYPE -> {
60+
openGraphResult!!.type = (tag.attr(OPEN_GRAPH_KEY))
61+
}
62+
}
63+
}
64+
}
65+
} catch (e: Exception) {
66+
e.printStackTrace()
67+
// launch(Dispatchers.Main) {
68+
// listener.onError(e.localizedMessage)
69+
// }
70+
// return@withContext null
71+
return null
72+
}
73+
74+
return openGraphResult
75+
}
76+
}

OGParser/src/main/java/com/kedia/ogparser/OpenGraphParser.kt

Lines changed: 11 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ class OpenGraphParser(
1616

1717
private var url: String = ""
1818

19+
private val AGENTS = mutableListOf<String>("Mozilla", "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)")
1920
private val AGENT = "Mozilla"
21+
// private val AGENT = "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"
2022
private val REFERRER = "http://www.google.com"
2123
private val TIMEOUT = 10000
2224
private val DOC_SELECT_QUERY = "meta[property^=og:]"
@@ -29,6 +31,8 @@ class OpenGraphParser(
2931
private val OG_SITE_NAME = "og:site_name"
3032
private val OG_TYPE = "og:type"
3133

34+
private val jsoupNetworkCall = JsoupNetworkCall()
35+
3236
private var openGraphResult: OpenGraphResult? = null
3337

3438
fun parse(url: String) {
@@ -58,56 +62,16 @@ class OpenGraphParser(
5862
if (sharedPrefs?.urlExists(url) == true) {
5963
return@withContext sharedPrefs?.getOpenGraphResult(url)
6064
}
61-
openGraphResult = OpenGraphResult()
62-
try {
63-
val response = Jsoup.connect(url)
64-
.ignoreContentType(true)
65-
.userAgent(AGENT)
66-
.referrer(REFERRER)
67-
.timeout(TIMEOUT)
68-
.followRedirects(true)
69-
.execute()
70-
71-
val doc = response.parse()
72-
73-
val ogTags = doc.select(DOC_SELECT_QUERY)
74-
when {
75-
ogTags.size > 0 ->
76-
ogTags.forEachIndexed { index, _ ->
77-
val tag = ogTags[index]
78-
val text = tag.attr(PROPERTY)
79-
80-
when (text) {
81-
OG_IMAGE -> {
82-
openGraphResult!!.image = (tag.attr(OPEN_GRAPH_KEY))
83-
}
84-
OG_DESCRIPTION -> {
85-
openGraphResult!!.description = (tag.attr(OPEN_GRAPH_KEY))
86-
}
87-
OG_URL -> {
88-
openGraphResult!!.url = (tag.attr(OPEN_GRAPH_KEY))
89-
}
90-
OG_TITLE -> {
91-
openGraphResult!!.title = (tag.attr(OPEN_GRAPH_KEY))
92-
}
93-
OG_SITE_NAME -> {
94-
openGraphResult!!.siteName = (tag.attr(OPEN_GRAPH_KEY))
95-
}
96-
OG_TYPE -> {
97-
openGraphResult!!.type = (tag.attr(OPEN_GRAPH_KEY))
98-
}
99-
}
100-
}
101-
}
102-
} catch (e: Exception) {
103-
e.printStackTrace()
104-
launch(Dispatchers.Main) {
105-
listener.onError(e.localizedMessage)
65+
66+
AGENTS.forEach {
67+
openGraphResult = jsoupNetworkCall.callUrl(url, it)
68+
val isResultNull = checkNullParserResult(openGraphResult)
69+
if (!isResultNull) {
70+
return@forEach
10671
}
107-
return@withContext null
10872
}
10973

110-
if ((openGraphResult!!.title.isNullOrEmpty() || openGraphResult!!.title.equals("null")) && (openGraphResult!!.description.isNullOrEmpty() || openGraphResult!!.description.equals("null")) && showNullOnEmpty) {
74+
if (checkNullParserResult(openGraphResult) && showNullOnEmpty) {
11175
launch(Dispatchers.Main) {
11276
listener.onError("Null or empty response from the server")
11377
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.kedia.ogparser
2+
3+
fun checkNullParserResult(openGraphResult: OpenGraphResult?): Boolean {
4+
return (openGraphResult!!.title.isNullOrEmpty() ||
5+
openGraphResult!!.title.equals("null")) &&
6+
(openGraphResult!!.description.isNullOrEmpty() ||
7+
openGraphResult!!.description.equals(
8+
"null"
9+
))
10+
}

app/src/main/java/com/kedia/opengraphpreview/MainActivity.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,16 @@ class MainActivity : AppCompatActivity(), OpenGraphCallback {
1414
super.onCreate(savedInstanceState)
1515
setContentView(R.layout.activity_main)
1616

17-
val openGraphParser = OpenGraphParser(this, context = this)
18-
openGraphParser.parse("https://www.youtube.com")
17+
val openGraphParser = OpenGraphParser(this, showNullOnEmpty = true)
18+
openGraphParser.parse("https://twitter.com/levelsio/status/1481942293108359168")
1919

2020
button.setOnClickListener {
2121
openGraphParser.parse(tview.text.toString())
2222
}
2323
}
2424

2525
override fun onPostResponse(openGraphResult: OpenGraphResult) {
26+
Log.e("TAG!!!!", "response $openGraphResult")
2627
tview.setText(openGraphResult.toString())
2728
}
2829

0 commit comments

Comments
 (0)