Nglewati watesan panelusuran LinkedIn kanthi muter karo API
Watesan
Ana watesan kaya ing LinkedIn - watesan panggunaan komersial. Mesthi wae sampeyan, kaya aku nganti saiki, durung nate nemoni utawa krungu.
Inti saka watesan yaiku yen sampeyan kerep nggunakake panelusuran kanggo wong ing njaba kontak sampeyan (ora ana metrik sing tepat, algoritma mutusake adhedhasar tumindak sampeyan - sepira kerepe lan sepira sampeyan nggoleki, nambahake wong), banjur asil panelusuran bakal diwatesi dadi telung profil, tinimbang 1000 (standar 100 kaca, 10 profil saben kaca). Watesan direset ing awal saben sasi. lumrahe, akun premium ora duwe watesan iki.
Nanging durung suwe, kanggo proyek pet, aku wiwit main akeh karo telusuran LinkedIn lan dumadakan entuk watesan iki. Mesthine, aku ora seneng banget, amarga aku ora nggunakake kanggo tujuan komersial, mula pikiranku pisanan yaiku sinau babagan watesan lan nyoba ngubengi.
[Klarifikasi penting: materi ing artikel kasebut mung kanggo tujuan informasi lan pendidikan. Penulis ora nyengkuyung panggunaan kanggo tujuan komersial.]
Kita sinau masalah kasebut
Kita duwe: tinimbang sepuluh profil kanthi pagination, telusuran mung ngasilake telung, sawise blok karo "rekomendasi" akun premium dilebokake lan ing ngisor iki ana profil sing surem lan ora bisa diklik.
Langsung, tangan tekan metu kanggo console pangembang kanggo ndeleng iki profil didhelikake - mbok menawa kita bisa mbusak sawetara gaya burem, utawa extract informasi saka blok ing markup. Nanging, cukup samesthine, profil iki mung gambar placeholder lan ora ana informasi sing disimpen.
Oke, saiki ayo goleki tab Jaringan lan priksa manawa asil telusuran alternatif sing mung ngasilake telung profil sing bener. Kita nemokake panjaluk sing dikarepake kanggo "/api/search/blend" lan deleng respon.
Profil teka ing array `kalebu`, nanging wis ana entitas 15. Ing kasus iki, telu sing pisanan minangka obyek kanthi informasi tambahan, saben obyek ngemot informasi babagan profil tartamtu (contone, apa profil kasebut premium. ).
12 sabanjure minangka profil nyata - asil telusuran, sing mung telu bakal ditampilake kanggo kita. Nalika sampeyan wis bisa guess, nuduhake mung sing nampa informasi tambahan (telu obyek pisanan). Contone, yen sampeyan njupuk jawaban saka profil tanpa watesan, sampeyan bakal nampa 28 entitas - 10 obyek karo tambahan. informasi lan 18 profil.
Jawaban kanggo profil tanpa watesan
Napa luwih saka 10 profil teka, sanajan persis 10 dijaluk, lan dheweke ora melu tampilan kanthi cara apa wae, sanajan ing kaca sabanjure ora bakal ana - aku durung ngerti. Yen sampeyan nganalisa URL panyuwunan, sampeyan bisa ndeleng sing count = 10 (pinten profil bali ing respon, maksimum 49).
Aku bakal seneng nampa komentar babagan perkara iki.
Ayo eksperimen
Oke, sing paling penting saiki kita ngerti manawa ana luwih akeh profil ing respon tinimbang sing dituduhake. Iki tegese kita bisa entuk luwih akeh data, sanajan ana watesan. Ayo nyoba narik API dhewe, langsung saka konsol, nggunakake fetch.
Kaya sing dikarepake, kita entuk kesalahan, 403. Iki amarga keamanan, ing kene kita ora ngirim token CSRF (CSRF ing Wikipedia. Cekakipun, token unik ditambahake ing saben panjalukan, sing dicenthang ing server kanggo keasliane).
Bisa disalin saka panjalukan liyane sing sukses utawa saka cookie, sing disimpen ing kolom 'JSESSIONID'.
Where kanggo nemokake tokenHeader saka panjalukan liyane:
Utawa saka cookie, langsung liwat console:
Coba maneh, wektu iki kita ngliwati setelan kanggo njupuk, ing ngendi kita nemtokake csrf-token minangka parameter ing header.
Sukses, kita nampa kabeh 10 profil. :tada:
Amarga bedane header, struktur respon rada beda karo sing ditampa ing panyuwunan asli. Sampeyan bisa entuk struktur sing padha yen sampeyan nambahake 'Nampa: 'application/vnd.linkedin.normalized+json+2.1' kanggo obyek kita, jejere token csrf. Tuladha tanggapan kanthi tambahan header
Banjur sampeyan bisa ngowahi (kanthi manual utawa ngotomatisasi) parameter `miwiti`, nuding menyang indeks, wiwit saka ngendi kita bakal diwenehi 10 profil (standar = 0) saka kabeh asil panelusuran. Kanthi tembung liyane, kanthi nambah 10 sawise saben panyuwunan, kita entuk output kaca saben kaca, 10 profil sekaligus.
Ing tataran iki, aku duwe cukup data lan kebebasan kanggo terus nggarap proyek pet. Nanging bakal dadi dosa yen ora nyoba nampilake data kasebut langsung ing papan kasebut, amarga wis ana. Kita ora bakal pindhah menyang Ember, sing digunakake ing ngarep. jQuery disambungake menyang situs, lan wis ndudhuk metu kawruh sintaks dhasar ing memori, sampeyan bisa nggawe ing ngisor iki ing sawetara menit.
Yen sampeyan nindakake iki langsung ing console ing kaca telusuran, bakal nambah tombol sing ngemot 10 profil anyar saben klik lan nggawe ing dhaptar. Mesthi wae, ganti token lan URL menyang sing dibutuhake sadurunge nindakake iki. Blok profil bakal ngemot jeneng, posisi, lokasi, link menyang profil lan gambar placeholder.
kesimpulan
Mangkono, kanthi minimal gaweyan, kita bisa nemokake titik sing lemah lan entuk maneh panelusuran tanpa watesan. Cukup kanggo nganalisa data lan dalane, goleki panjaluk kasebut.
Aku ora bisa ngomong yen iki minangka masalah serius kanggo LinkedIn, amarga ora nyebabake ancaman. Maksimum wis ilang MediaWiki amarga kuwi "workarounds", sing ngijini sampeyan kanggo supaya mbayar premium. Mbok menawa respon server kasebut perlu kanggo operasi sing bener ing bagean liya saka situs kasebut, utawa mung kesed para pangembang lan kekurangan sumber daya sing ora ngidini supaya bisa ditindakake kanthi apik. (Watesan kasebut muncul ing Januari 2015; sadurunge iki ora ana watesan).
PS
Mesthi, kode jQuery minangka conto kemampuan sing rada primitif. Ing wayahe aku wis nggawe extension browser sing cocog karo kabutuhan. Nambahake tombol kontrol lan nggawe profil lengkap karo gambar, tombol undhangan lan sambungan umum. Kajaba iku, kanthi dinamis nglumpukake saringan kanggo lokasi, perusahaan, lan liya-liyane, lan njupuk token saka cookie. Dadi ora perlu hardcode apa-apa maneh. Inggih, nambah lapangan setelan tambahan, a la "pinten profil kanggo njaluk ing wektu, nganti 49."
Aku isih nggarap tambahan iki lan rencana bakal diluncurake menyang publik. Tulis yen sampeyan kasengsem.