Tangkapan layar situs web


407

Apakah ada cara untuk mengambil tangkapan layar situs web dalam PHP, lalu menyimpannya ke file?


2
Jika Anda menyukai solusi drop-in, lihat Usersnap - ini adalah layanan bagus yang menawarkan tangkapan layar situs web yang akurat. Anda hanya perlu menambahkan potongan Javascript kecil ke halaman Anda untuk membuatnya berfungsi.
Gregor

1
Usersnap tidak dapat mengatasi halaman web yang menggunakan Ajax untuk menghasilkan konten seperti pada halaman ini . Bagaimana saya bisa mencapainya? katakanlah: buat tangkapan layar 10 detik setelah pemuatan awal halaman selesai
rubo77

1
@ rubo77: Usersnap mendukung DOM dinamis seperti itu, saya sudah mencobanya dengan halaman Anda - tangkapan layar mereproduksi situasi yang tepat termasuk semua posisi.
Gregor

Jawaban:


280

EDIT TERAKHIR : setelah 7 tahun saya masih mendapatkan upvotes untuk jawaban ini, tapi saya kira yang ini sekarang jauh lebih akurat.


Tentu Anda bisa, tetapi Anda harus membuat halaman dengan sesuatu. Jika Anda benar-benar hanya ingin menggunakan php, saya sarankan Anda HTMLTOPS , yang merender halaman dan menampilkannya dalam file ps (ghostscript), kemudian, konversikan ke dalam .jpg, .png, .pdf .. bisa menjadi sedikit lebih lambat dengan halaman kompleks (dan tidak mendukung semua CSS).

Selain itu, Anda dapat menggunakan wkhtmltopdf untuk menghasilkan halaman html di pdf, jpg, apa pun .. Terima CSS2.0, gunakan webkit (pembungkus safari) untuk membuat halaman .. jadi harus baik-baik saja. Anda harus menginstalnya di server Anda, juga ..

PEMBARUAN Sekarang, dengan fitur HTML5 dan JS baru, juga memungkinkan untuk merender halaman menjadi objek kanvas menggunakan JavaScript. Berikut pustaka yang bagus untuk melakukannya: Html2Canvas dan di sini adalah implementasi oleh penulis yang sama untuk mendapatkan umpan balik seperti G +. Setelah Anda merender dom ke kanvas, Anda dapat mengirim ke server melalui ajax dan menyimpannya sebagai jpg.

EDIT : Anda dapat menggunakan alat imagemagick untuk mengubah pdf ke png. Versi wkhtmltopdf saya tidak mendukung gambar. Misalnya convert html.pdf -append html.png.

EDIT : Script shell kecil ini memberikan contoh penggunaan sederhana / tetapi berfungsi di linux dengan php5-cli dan alat-alat yang disebutkan di atas.

EDIT : saya perhatikan sekarang bahwa tim wkhtmltopdf sedang mengerjakan proyek lain: wkhtmltoimage, yang memberi Anda jpg secara langsung


11
+1 untuk wkhtmltopdf. Saya telah bermain-main dengan beberapa perpustakaan lain tetapi tidak satupun dari mereka yang mendekati mendukung apa pun selain HTML dan CSS yang sangat mendasar. wkhtmltopdf dapat melakukan semua yang dilakukan Safari, jadi Anda cukup aman di sana.
Wim

7
wkhtmltoimage bekerja dengan sangat baik! Terima kasih atas tipnya. Output png juga.
yuttadhammo

2
Sekarang Anda menyebutkan wkhtmltopdf KnpLabs memiliki pembungkus untuk itu github.com/KnpLabs/snappy
rmontagud

1
@ rmontagud penggunaan wkhtmltopdf cukup mudah, omong-omong bungkus OOP selalu bagus!
Strae

1
Ini semua adalah solusi hebat beberapa tahun yang lalu, tetapi teknologi peramban yang mendasari semuanya belum diperbarui dengan spesifikasi HTML5 / CSS terbaru. Jika Anda merender situs yang menggunakan webfonts, svg, kanvas, flexbox dll. Semoga sukses mendapatkan tangkapan layar yang akurat .. Jika Anda ingin tangkapan layar yang akurat periksa jawaban saya yang menggunakan urlbox
cjroebuck

87

Karena PHP 5.2.2 dimungkinkan, untuk menangkap situs web dengan PHP semata-mata !

imagegrabscreen - Menangkap seluruh layar

<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>

imagegrabwindow - Ambil jendela atau area kliennya menggunakan pegangan jendela (properti HWND dalam contoh COM)

<?php
$Browser = new COM('InternetExplorer.Application');
$Browserhandle = $Browser->HWND;
$Browser->Visible = true;
$Browser->Fullscreen = true;
$Browser->Navigate('http://www.stackoverflow.com');

while($Browser->Busy){
  com_message_pump(4000);
}

$img = imagegrabwindow($Browserhandle, 0);
$Browser->Quit();
imagepng($img, 'screenshot.png');
?>

Sunting: Catatan, fungsi-fungsi ini HANYA tersedia pada sistem Windows!


26
Tidak benar-benar Hanya PHP kan?
Toby Allen

Ini menggunakan browser Internet explorer untuk membuat hal-hal.
keanu_reeves

55

Jika Anda tidak ingin menggunakan alat pihak ketiga, saya telah menemukan solusi sederhana yang menggunakan api Google Page Insight .

Hanya perlu menyebutnya api dengan params screenshot=true.

https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true

Untuk parade tampilan situs seluler &strategy=mobile,

https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile

DEMO .


3
Ini cukup keren dan juga sepertinya berfungsi tanpa menyediakan kunci api. Gambar yang dikembalikan rusak, Anda harus mengganti semua '_' dengan '/' dan semua '-' dengan '+' dan kemudian Anda bisa menambahkannya sebagai data uri
Robert Went

9
Ini luar biasa. Saya telah membuat kode ini di gist.github.com/jaseclamp/d4ac6205db352e822ff6
JaseC

21
Jadi, untuk referensi, Google Page Insight API adalah alat pihak ketiga.
Jimbo

1
tangkapan layar memiliki resolusi terbatas hingga 320x240, seperti ibu jari
Gabriele F.

1
Sangat mengagumkan! Ini memiliki beberapa batasan untuk menggunakannya?
moreirapontocom

19

Anda dapat menggunakan browser tanpa kepala sederhana seperti PhantomJS untuk mengambil halaman.

Anda juga dapat menggunakan PhantomJS dengan PHP.

Lihatlah skrip php kecil ini yang melakukan ini. Lihatlah di sini https://github.com/microweber/screen

Dan di sini adalah API- http://screen.microweber.com/shot.php?url=/programming/757675/website-screenshots-using-php


PhantomJS umumnya merupakan solusi yang bagus untuk ini, meskipun ketika saya menggunakannya untuk tujuan ini, tidak semua elemen antarmuka HTML ditampilkan dengan benar.
ultrageek

2
screen.microweber.com/shot.php?url=https://stackoverflow.com/… sekarang menjadi 404 dan bertanya-tanya apakah jawabannya di sini harus dihapus. Dalam kedua kasus, itu harus diperbarui.
Funk Forty Niner

18

Ini seharusnya baik untuk Anda:

https://wkhtmltopdf.org/

Pastikan Anda mengunduh distribusi wkhtmltoimage!


1
BTW, saya menginstalnya di Ubuntu 10,04 hanya dengan menggunakan apt-get. Namun, ketika saya menjalankannya, itu sangat, sangat lambat dan tata letak PDF miring, dan bukan opsi yang layak. Namun, itu menunjukkan janji untuk menggunakan KHTML dengan cara ini - akhirnya - untuk pembuatan gambar.
Volomike

@Vomomike - Anda tidak bisa mendapatkan hasil yang lebih baik daripada ini karena, seperti yang Anda tahu, browser yang memenuhi standar digunakan. Untuk mempercepat, perusahaan tempat saya bekerja telah berulang kali menggunakannya dalam proyek lain-lain yang membutuhkan proyek CSS berbutir halus (tetapi kecil).
Kristen

Saya bisa menjamin kemanjuran produk ini. Saya mengembangkan aplikasi pembuatan bagan untuk klien pemerintah yang dikirim melalui html / css tetapi harus diarsipkan sebagai file pdf. TIDAK ADA produk web-ke-pdf LAIN yang hampir mendekati dengan sempurna mereproduksi bagan kami sebagai wkhtmltopdf.
Daniel Szabo

@Vomomike: versi dalam repositori biasanya bukan yang terbaru; menginstal versi stabil terbaru dari sumber memperbaiki banyak kebiasaan versi lama untuk saya.
Piskvor meninggalkan gedung

10

Iya. Anda akan memerlukan beberapa hal:

Lihat khtmld (aemon) di * nx. Lihat Url2Jpg untuk Windows tetapi karena ini adalah aplikasi dotNet Anda juga harus chek Url2Bmp

Keduanya adalah alat konsol yang dapat Anda manfaatkan dari aplikasi web Anda untuk mendapatkan tangkapan layar.

Ada juga layanan web yang menawarkannya. Lihat ini sebagai contoh.

Edit:

Ini link yang berguna untuk.


10

Ini menggunakan Python, tetapi mempelajari dokumentasi dan kode Anda dapat melihat persis bagaimana ini dilakukan. Jika Anda dapat menjalankan python, maka itu solusi siap pakai untuk Anda:

http://browsershots.org/

Perhatikan bahwa semuanya dapat berjalan pada satu mesin untuk satu platform, atau satu mesin dengan mesin virtual yang menjalankan platform lainnya.

Gratis, sumber terbuka, gulir ke bawah halaman untuk tautan ke dokumentasi, kode sumber, dan informasi lainnya.


24
Aturan 37: Tidak ada yang berlebihan. Hanya ada 'api terbuka', dan 'waktu untuk memuat ulang'.
Adam Davis

Kode sumber masih menjalankan browser desktop untuk rendering. Ini bukan thread yang aman dan mungkin rentan terkunci.
Volomike

@Vomomike - Benar, tetapi jika Anda perlu melihat seperti apa halaman saat browser menjalankannya, hampir tidak ada pilihan yang lebih baik. Mesin rendering HTML hanya berjalan sejauh ini dengan halaman berat javascript hari ini. Menetapkan izin eksekusi dan batas waktu yang sesuai harus membatasi kesulitan dan risiko menjalankan program eksternal.
Adam Davis


5

Nah, PhantomJS adalah browser yang bisa dengan mudah diletakkan di server dan mengintegrasikannya ke php. Anda dapat menemukan kode di WDudes. Mereka telah memasukkan lebih banyak fitur seperti menentukan ukuran gambar, cache, unduh sebagai file atau tampilan di img src dll.

<img src=”screenshot.php?url=google.com” />

Parameter URL

  • Lebar dan Tinggi: tangkapan layar.php? Url = google.com & w = 1000 & h = 800

  • Dengan memotong: tangkapan layar.php? Url = google.com & w = 1000 & h = 800 & clipw = 800 & cliph = 600

  • Nonaktifkan cache dan muat screesnhot segar:
    tangkapan layar.php ? Url = google.com & cache = 0

  • Untuk mengunduh gambar: tangkapan layar.php? Url = google.com & unduh = true

Anda dapat melihat tutorialnya di sini: Tangkap Cuplikan Layar Situs Web menggunakan PHP tanpa API


oh Maaf soal itu. Sepertinya blog sudah tidak lagi. Coba github.com/graphcool/chromeless @NarendraVerma
Gijo Varghese

4

cutycapt menyimpan halaman web ke sebagian besar format gambar (jpg, png ..) unduh dari sinaptik Anda, ini bekerja jauh lebih baik daripada wkhtmltopdf



3

Saya mengatur akhirnya menggunakan microweber / layar seperti yang diusulkan oleh @boksiora.
Awalnya ketika mencoba tautan yang disebutkan di sini, apa yang saya dapatkan:

Please download this script from here https://github.com/microweber/screen

Saya di Linux. Jadi jika Anda ingin menjalankannya, Anda dapat menyesuaikan langkah saya mengikuti lingkungan Anda.
Berikut langkah yang saya lakukan pada shell di DOCUMENT_ROOTfolder:

$ sudo wget https://github.com/microweber/screen/archive/master.zip
$ sudo unzip master.zip
$ sudo mv screen-master screen
$ sudo chmod +x screen/bin/phantomjs
$ sudo yum install fontconfig
$ sudo yum install freetype*
$ cd screen
$ sudo curl -sS https://getcomposer.org/installer | php
$ sudo php composer.phar update
$ cd ..
$ sudo chown -R apache screen
$ sudo chgrp -R www screen
$ sudo service httpd restart

Arahkan browser Anda ke screen/demo/shot.php?url=google.com. Ketika Anda melihat tangkapan layar , Anda selesai. Diskusi untuk pengaturan lebih lanjut tersedia di sini dan di sini .


3

Ada banyak proyek open source yang dapat menghasilkan tangkapan layar. Misalnya PhantomJS, webkit2png dll

Masalah besar dengan proyek-proyek ini adalah bahwa mereka didasarkan pada teknologi browser yang lebih tua dan memiliki masalah dalam merender banyak situs, terutama situs yang menggunakan webfonts, flexbox, svg dan berbagai tambahan lainnya pada spesifikasi HTML5 dan CSS selama beberapa bulan / tahun terakhir.

Saya sudah mencoba beberapa layanan pihak ketiga, dan sebagian besar didasarkan pada PhantomJS, yang berarti mereka juga menghasilkan tangkapan layar berkualitas buruk. Layanan pihak ketiga terbaik untuk menghasilkan tangkapan layar situs web adalah urlbox.io . Ini adalah layanan berbayar, meskipun ada uji coba 7 hari gratis untuk mengujinya tanpa melakukan rencana pembayaran.

Berikut ini tautan ke dokumentasi , dan di bawah ini adalah langkah-langkah sederhana untuk membuatnya bekerja dalam PHP dengan komposer.

// 1 . Get the urlbox/screenshots composer package (on command line):
composer require urlbox/screenshots

// 2. Set up the composer package with Urlbox API credentials:
$urlbox = UrlboxRenderer::fromCredentials('API_KEY', 'API_SECRET');

// 3. Set your options (all options such as full page/full height screenshots, retina resolution, viewport dimensions, thumbnail width etc can be set here. See the docs for more.)
$options['url'] = 'example.com';

// 4. Generate the Urlbox url
$urlboxUrl = $urlbox->generateUrl($options);
// $urlboxUrl is now 'https://api.urlbox.io/v1/API_KEY/TOKEN/png?url=example.com'

// 5. Now stick it in an img tag, when the image is loaded in browser, the API call to urlbox will be triggered and a nice PNG screenshot will be generated!
<img src="$urlboxUrl" />

Untuk misalnya, inilah tangkapan layar ketinggian penuh dari halaman ini:

https://api.urlbox.io/v1/ca482d7e-9417-4569-90fe-80f7c5e1c781/8f1666d1f4195b1cb84ffa5f992ee18992a2b35e/png?url=http%3A%2F%2%%%%%%%%%% dengan https://www.facebook.com/?hl=id 2F43652083% 2343652083 & full_page = true

tangkapan layar halaman penuh dari pertanyaan stackoverflow.com didukung oleh urlbox.io


3

Ada banyak pilihan dan mereka semua memiliki pro dan kontra. Berikut adalah daftar opsi yang dipesan oleh kesulitan implementasi.

Opsi 1: Gunakan API (yang termudah)

Pro

  • Jalankan Javascript
  • Render yang mendekati sempurna
  • Cepat saat opsi caching digunakan dengan benar
  • Skala ditangani oleh API
  • Waktu yang tepat, viewport, ...
  • Sebagian besar waktu mereka menawarkan paket gratis

Cons

  • Tidak gratis jika Anda berencana untuk sering menggunakannya

Opsi 2: Gunakan salah satu dari banyak perpustakaan yang tersedia

Pro

  • Konversi sebagian besar cukup cepat

Cons

  • Rendering yang buruk
  • Tidak menjalankan javascript
  • Tidak ada dukungan untuk fitur web terkini (FlexBox, Selectors Lanjutan, Webfonts, Ukuran Kotak, Kueri Media, tag HTML5 ...)
  • Terkadang tidak begitu mudah untuk menginstal
  • Rumit dengan skala

Opsi 3: Gunakan PhantomJs dan mungkin pustaka pembungkus

Pro

  • Jalankan Javascript
  • Cukup cepat

Cons

  • Rendering yang buruk
  • PhantomJs telah usang dan tidak dipertahankan lagi.
  • Tidak ada dukungan untuk fitur web terkini (FlexBox, Selectors Lanjutan, Webfonts, Ukuran Kotak, Kueri Media, tag HTML5 ...)
  • Rumit dengan skala
  • Tidak begitu mudah untuk membuatnya berfungsi jika ada gambar yang akan dimuat ...

Opsi 4: Gunakan Chrome Headless dan mungkin perpustakaan pembungkus

Pro

  • Jalankan Javascript
  • Render yang mendekati sempurna

Cons

  • Tidak begitu mudah mendapatkan hasil yang diinginkan mengenai:
    • waktu pemuatan halaman
    • integrasi proxy
    • gulir otomatis
    • ...
  • Rumit dengan skala
  • Cukup lambat dan bahkan lebih lambat jika html berisi tautan eksternal

Penafian: Saya adalah pendiri ApiFlash. Saya melakukan yang terbaik untuk memberikan jawaban yang jujur ​​dan bermanfaat.


2

Saya menggunakan Windows sehingga saya dapat menggunakan fungsi imagegrabwindow setelah membaca tip di sini dari stephan. Saya menambahkan dalam pemotongan (untuk menghilangkan header Browser, scroll bar, dll.) Dan mengubah ukuran untuk mendapatkan gambar akhir. Ini kode saya . Semoga itu bisa membantu seseorang.


1

webkit2html berfungsi pada Mac OS X dan Linux, cukup mudah untuk diinstal dan digunakan. Lihat tutorial ini .

Untuk Windows, Anda dapat menggunakan CutyCapt , yang memiliki fungsi serupa.


2
@Smith: Terakhir kali saya memeriksa, CutyCapt memiliki semua dependensi dalam installer. Ya, Anda mungkin tidak akan dapat menginstal ini di bawah akun terbatas, tetapi begitulah adanya. Perhatikan bahwa semua solusi lain menggunakan semacam pembungkus di sekitar inti rendering, sehingga Anda berada di tempat yang sama dengan mereka.
Piskvor meninggalkan gedung

1

Saya menggunakan bluga . Api memungkinkan Anda mengambil 100 foto sebulan tanpa membayar, tetapi kadang-kadang menggunakan lebih dari 1 kredit untuk satu halaman. Saya baru saja selesai memutakhirkan modul drupal, Bluga WebThumbs ke drupal 7 yang memungkinkan Anda mencetak thumbnail dalam template atau input filter.

Keuntungan utama menggunakan api ini adalah memungkinkan Anda untuk menentukan dimensi peramban jika Anda menggunakan css adaptif, jadi saya menggunakannya untuk mendapatkan rendering untuk tata letak ponsel dan tablet serta yang biasa.

Ada api klien untuk bahasa-bahasa berikut:

PHP , Python , Ruby , Java , .Net C # , Perl dan Bash (skrip shell sepertinya membutuhkan perl)



1

Anda dapat menggunakan solusi https://grabz.it .

Itu punya PHP API yang sangat fleksibel dan dapat dipanggil dengan berbagai cara seperti dari cronjob atau halaman web PHP.

Untuk menerapkannya, Anda harus terlebih dahulu mendapatkan kunci aplikasi dan rahasia serta mengunduh (gratis) SDK.

Dan contoh untuk implementasi. Pertama-tama inisialisasi:

include("GrabzItClient.class.php");

// Create the GrabzItClient class
// Replace "APPLICATION KEY", "APPLICATION SECRET" with the values from your account!
$grabzIt = new GrabzItClient("Sign in to view your Application Key", "Sign in to view your Application Secret");

Dan contoh tangkapan layar:

// To take a image screenshot
$grabzIt->URLToImage("http://www.google.com");  
// Or to take a PDF screenshot
$grabzIt->URLToPDF("http://www.google.com");
// Or to convert online videos into animated GIF's
$grabzIt->URLToAnimation("http://www.example.com/video.avi");
// Or to capture table(s)
$grabzIt->URLToTable("http://www.google.com");

Berikutnya adalah penghematan. Anda dapat menggunakan salah satu dari dua metode penyimpanan, Savejika panggilan balik yang dapat diakses publik tersedia dan SaveTojika tidak. Periksa dokumentasi untuk detailnya .


Jika Anda mencari tangkapan layar satu halaman penuh, penyedia ini membutuhkan langganan Profesional ($ 170 / tahun).
chaoskreator

1

Saya menulis aplikasi cepat dan kotor tempo hari untuk melakukan ini menggunakan Google API. Tentunya ruang lingkup untuk peningkatan ...

  • Ini menggunakan Google API ver 5 terbaru.
  • Ukuran gambar sekarang selebar 500px
  • Mendukung tampilan desktop & seluler
  • Simpan ke file di folder tertentu
  • Menggabungkan sistem cache yang belum sempurna

Temukan di sini dengan demo dan kode langsung .

Saya tidak memposting kode di sini hanya karena saya terus memperbaikinya dan mudah-mudahan ketika saya punya waktu, mengubahnya menjadi kelas yang tepat.


0

Saya menggunakan page2images . Ini dikembangkan berdasarkan cutycapt yang sangat cepat dan stabil. Jika Anda tidak ingin menghabiskan terlalu banyak waktu untuk kinerja dan konfigurasi, Anda harus menggunakannya. Jika Anda mengunjungi situs web mereka, Anda dapat menemukan lebih banyak detail dan contoh kode PHP.


0

Setelah banyak berselancar di web saya menemukan ini.

PPTRAAS > Alat gratis untuk menangkap tangkapan layar dengan mengirimkan URL Anda sebagai parameter

Mereka menyediakan banyak opsi hanya dengan menekan URL mereka.

  1. Dapatkan tangkapan layar satu halaman penuh

    https://pptraas.com/screenshot?url= {URL ANDA DI SINI}

  2. Dapatkan tangkapan layar halaman dengan ukuran tertentu

    https://pptraas.com/screenshot?url= {URL ANDA DI SINI} & size = 400.400

  3. Satu bahkan dapat mengkonversi halaman ke pdf

    https://pptraas.com/pdf?url= {URL ANDA DI SINI}


Josh, ketika saya mengunggah jawabannya, itu berfungsi dengan baik, saya kira kita tidak bisa bergantung pada url ini, tolong cari alternatif lain karena mereka mungkin telah menghentikan layanan untuk saat ini
Fenil Shah

0

Anda bisa melakukan 2 hal.

Gunakan Dalang

Anda dapat menggunakan paket PHP Puppeteer untuk memutar browser dan mengambil tangkapan layar.

Gunakan API

Ada banyak tangkapan layar API. Anda dapat melihat ScreenshotAPI.net misalnya. (Penafian saya pencipta API itu)


-1

Tidak secara langsung. Perangkat lunak seperti Selenium memiliki fitur seperti ini dan dapat dikontrol oleh PHP tetapi memiliki dependencys lainnya (seperti menjalankan server berbasis java di komputer dengan browser yang ingin Anda tangkapan layar)


Ada banyak perpustakaan PHP sekarang tersedia untuk itu. Bukan perpustakaan 'PHP'. Melibatkan beberapa browser dan kode js.
Gijo Varghese

-1

Anda dapat menggunakan cutycapt.

kwhtml sudah usang dan menampilkan halaman seperti browser lama.


-1

Saya menemukan ini sebagai alat terbaik dan termudah: ScreenShotMachine . Ini adalah layanan berbayar, tetapi Anda mendapatkan 100 tangkapan layar gratis dan Anda dapat membeli 2.000 lainnya seharga (sekitar) $ 20, jadi ini adalah kesepakatan yang cukup bagus. Ini memiliki penggunaan yang sangat sederhana, Anda hanya menggunakan URL, jadi saya menulis skrip kecil ini untuk menyimpan file berdasarkan itu:

<?php
  $url = file_get_contents("http://api.screenshotmachine.com/?key={mykey}&url=https://stackoverflow.com&size=X");

  $file = fopen("snapshots/stack.jpg", "w+");
  fwrite($file, $url);
  fclose($file);
  die("saved file!");
?>

Mereka memiliki dokumentasi yang sangat bagus di sini , jadi Anda harus melihatnya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.