はじめに
- URLを取得したときにわかりやすくアイコンを取得したかった
- WebViewを使って取得するのは難しかった。
- かんたんに完結にfaviconを取得したかった。
というわけで、PicassoとGoogleAPIを組み合わせてfaviconを取得しよう!!
準備(Gradle モジュール)
Picassoを使用するために、Gradleに以下の文を加筆する。
dependencies {
implementation 'com.squareup.picasso:picasso:2.71828'
}
準備(AndroidManifest)
インターネットに接続して、画像を取得するため、ユーザーパーミッションの以下の文も加筆しておく。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
URLからGoogleAPIを使用して、faviconを取得する。
正式名称がわからないため、GoogleAPIであっているかもわかりませんが、このURLを使用すれば、faviconを取得できるらしい。
https://www.google.com/s2/favicons?domain=youtube.com
https://www.google.com/s2/favicons?domain={ドメイン}
ドメインの部分を変えればそのサイトのfaviconがPNG形式で取得できる
Picassoを使って画像を取得する。
Picassoを使用して、画像を取得することができる。
//MainActivity.kt
//OnCreate内
val domein = youtube.com
Picasso.get()
//画像が乗っているURL
.load("https://www.google.com/s2/favicons?domain=$domein")
.resize(300, 300) //表示サイズ指定
.centerCrop() //resizeで指定した範囲になるよう中央から切り出し
.into(findViewById<ImageView>(R.id.imageView)) //imageViewに流し込み
ソースコード
package それぞれ合わせてください。
import android.os.Bundle
import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.squareup.picasso.Picasso
import java.net.URI
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var text = "https://twitter.com/home"
findViewById<TextView>(R.id.textView).text = text
// ドメインの取得
val domein = URI(text).rawAuthority
findViewById<TextView>(R.id.textView2).text = domein
Picasso.get()
//画像が乗っているURL
.load("https://www.google.com/s2/favicons?domain=$domein")
.resize(300, 300) //表示サイズ指定
.centerCrop() //resizeで指定した範囲になるよう中央から切り出し
.into(findViewById<ImageView>(R.id.imageView)) //imageViewに流し込み
}
}
まとめ
今回faviconのAndroidでの取得の仕方をまとめてみました。
利点としてはとても簡潔なプログラムで完成してよかったです。
難点としては取得した画像の画質が悪いことですかね。
参考文献
github
今回部分部分で紹介していましたのでしっかりとプロジェクトとして作られているものも作りました。
ぜひ使ってみてください。
変更履歴
2022/4/25更新
・「Picasa」になっている部分がありましたので「Picasso」に変更しました。
・ドメインの取得を、自作関数から、javaの「java.net.URI」に変更した。