ProHoster > Blog > Pangangasiwa > Paglampas sa limitasyon sa paghahanap ng LinkedIn sa pamamagitan ng paglalaro sa API
Paglampas sa limitasyon sa paghahanap ng LinkedIn sa pamamagitan ng paglalaro sa API
Limitahan
Mayroong ganoong limitasyon sa LinkedIn - Limitasyon sa komersyal na paggamit. Malaki ang posibilidad na ikaw, tulad ko hanggang kamakailan, ay hindi kailanman nakatagpo o nakarinig tungkol dito.
Ang esensya ng limitasyon ay kung masyadong madalas mong ginagamit ang paghahanap para sa mga tao sa labas ng iyong mga contact (walang eksaktong sukatan, ang algorithm ay magpapasya batay sa iyong mga aksyon - kung gaano kadalas at gaano ka naghanap, nagdagdag ng mga tao), pagkatapos ay ang resulta ng paghahanap ay limitado sa tatlong profile, sa halip na 1000 (default na 100 pahina, 10 profile bawat pahina). Nire-reset ang limitasyon sa simula ng bawat buwan. natural, Ang mga premium na account ay walang limitasyong ito.
Ngunit hindi nagtagal, para sa isang proyekto ng alagang hayop, nagsimula akong maglaro ng marami sa paghahanap sa LinkedIn at biglang nakuha ang limitasyong ito. Naturally, hindi ko ito masyadong gusto, dahil hindi ko ito ginamit para sa anumang komersyal na layunin, kaya ang una kong naisip ay pag-aralan ang limitasyon at subukang lampasan ito.
[Isang mahalagang paglilinaw: ang mga materyales sa artikulo ay ipinakita lamang para sa mga layuning pang-impormasyon at pang-edukasyon. Hindi hinihikayat ng may-akda ang kanilang paggamit para sa komersyal na layunin.]
Pinag-aaralan namin ang problema
Mayroon kaming: sa halip na sampung mga profile na may pagination, ang paghahanap ay nagbabalik lamang ng tatlo, pagkatapos ay isang block na may "rekomendasyon" ng isang premium na account ay ipinasok at sa ibaba ay malabo at hindi naki-click na mga profile.
Kaagad, inaabot ng kamay ang developer console upang tingnan ang mga nakatagong profile na ito - marahil ay maaari tayong mag-alis ng ilang mga istilong lumalabo, o kumuha ng impormasyon mula sa isang bloke sa markup. Ngunit, medyo inaasahan, ang mga profile na ito ay makatarungan mga larawan ng placeholder at walang impormasyon na nakaimbak.
Okay, ngayon tingnan natin ang tab na Network at tingnan kung gumagana ang mga alternatibong resulta ng paghahanap na nagbabalik lamang ng tatlong profile. Nahanap namin ang kahilingan kung saan interesado kami para sa "/api/search/blended" at tingnan ang tugon.
Ang mga profile ay nasa isang array na `kasama`, ngunit mayroon nang 15 entity sa kasong ito, ang unang tatlo sa mga ito ay mga bagay na may karagdagang impormasyon, ang bawat bagay ay naglalaman ng impormasyon sa isang partikular na profile (halimbawa, kung ang profile ay premium. ).
Ang susunod na 12 ay mga totoong profile - mga resulta ng paghahanap, kung saan tatlo lamang ang ipapakita sa amin. Tulad ng maaari mo nang hulaan, ipinapakita lamang nito ang mga tumatanggap ng karagdagang impormasyon (ang unang tatlong bagay). Halimbawa, kung kukuha ka ng sagot mula sa isang profile na walang limitasyon, makakatanggap ka ng 28 entity - 10 bagay na may karagdagang. impormasyon at 18 profile.
Sagot para sa profile nang walang limitasyon
Bakit higit sa 10 mga profile ang dumating, kahit na eksaktong 10 ang hiniling, at hindi sila nakikilahok sa pagpapakita sa anumang paraan, kahit na sa susunod na pahina ay hindi sila magiging - hindi ko pa alam. Kung susuriin mo ang URL ng kahilingan, makikita mo na bilang=10 (ilang profile ang ibabalik sa tugon, maximum na 49).
Natutuwa akong makatanggap ng anumang komento sa bagay na ito.
Mag-eksperimento tayo
Okay, ang pinakamahalagang bagay na siguradong alam na natin ngayon ay mas maraming profile sa tugon kaysa sa ipinapakita nila sa atin. Nangangahulugan ito na makakakuha tayo ng mas maraming data, sa kabila ng limitasyon. Subukan nating hilahin ang API mismo, direkta mula sa console, gamit ang fetch.
Gaya ng inaasahan, nagkakaroon kami ng error, 403. Ito ay dahil sa seguridad, dito hindi kami nagpapadala ng CSRF token (CSRF sa Wikipedia. Sa madaling sabi, isang natatanging token ang idinaragdag sa bawat kahilingan, na sinusuri sa server para sa pagiging tunay).
Maaari itong kopyahin mula sa anumang iba pang matagumpay na kahilingan o mula sa cookies, kung saan ito ay nakaimbak sa field na 'JSESSIONID'.
Saan mahahanap ang tokenHeader ng isa pang kahilingan:
O mula sa cookies, direkta sa pamamagitan ng console:
Subukan nating muli, sa pagkakataong ito ay ipinapasa namin ang mga setting upang kunin, kung saan tinukoy namin ang aming csrf-token bilang isang parameter sa header.
Tagumpay, natatanggap namin ang lahat ng 10 profile. :tada:
Dahil sa pagkakaiba sa mga header, ang istraktura ng tugon ay bahagyang naiiba sa kung ano ang natanggap sa orihinal na kahilingan. Makukuha mo ang parehong istraktura kung idaragdag mo ang 'Accept: 'application/vnd.linkedin.normalized+json+2.1' sa aming object, sa tabi ng csrf token. Halimbawang tugon na may idinagdag na header
Pagkatapos ay maaari mong i-edit (manual o i-automate) ang parameter na `start`, na tumuturo sa index, simula kung saan bibigyan kami ng 10 profile (default = 0) mula sa buong resulta ng paghahanap. Sa madaling salita, sa pamamagitan ng pagdaragdag nito ng 10 pagkatapos ng bawat kahilingan, nakukuha namin ang karaniwang page-by-page na output, 10 profile sa isang pagkakataon.
Sa yugtong ito mayroon akong sapat na data at kalayaan upang magpatuloy sa paggawa sa proyekto ng alagang hayop. Ngunit magiging kasalanan kung hindi subukang ipakita ang data na ito sa mismong lugar, dahil nasa kamay na ito. Hindi kami pupunta sa Ember, na ginagamit sa harap. Ang jQuery ay konektado sa site, at sa paghukay ng kaalaman sa pangunahing syntax sa memorya, maaari mong gawin ang sumusunod sa loob ng ilang minuto.
Kung gagawin mo ito nang direkta sa console sa page ng paghahanap, magdaragdag ito ng button na naglo-load ng 10 bagong profile sa bawat pag-click at ire-render ang mga ito sa isang listahan. Siyempre, baguhin ang token at URL sa kinakailangang isa bago ito gawin. Ang profile block ay maglalaman ng pangalan, posisyon, lokasyon, link sa profile at isang placeholder na imahe.
Konklusyon
Kaya, sa kaunting pagsisikap, nahanap namin ang mahinang lugar at nabawi ang aming paghahanap nang walang mga paghihigpit. Ito ay sapat na upang pag-aralan ang data at ang landas nito, tingnan ang kahilingan mismo.
Hindi ko masasabi na ito ay isang seryosong problema para sa LinkedIn, dahil hindi ito nagbibigay ng anumang banta. Ang maximum ay nawawalang kita dahil sa naturang "mga workaround", na nagpapahintulot sa iyo na maiwasan ang pagbabayad para sa premium. Marahil ang ganoong tugon mula sa server ay kinakailangan para sa tamang operasyon ng iba pang mga bahagi ng site, o ito ay simpleng katamaran ng mga developer at isang kakulangan ng mga mapagkukunan na hindi nagpapahintulot na magawa ito nang maayos. (Ang limitasyon ay lumitaw noong Enero 2015; bago ito ay walang limitasyon).
PS
Naturally, ang jQuery code ay isang medyo primitive na halimbawa ng mga kakayahan. Sa ngayon ay nakagawa ako ng extension ng browser upang umangkop sa aking mga pangangailangan. Nagdaragdag ito ng mga control button at nagre-render ng buong profile na may mga larawan, isang button ng imbitasyon at mga pangkalahatang koneksyon. Dagdag pa, dynamic itong nangongolekta ng mga filter para sa mga lokasyon, kumpanya, at iba pang bagay, at kumukuha ng token mula sa cookies. Kaya hindi na kailangang mag-hardcode ng kahit ano. Well, nagdaragdag ito ng mga karagdagang field ng setting, a la "kung gaano karaming mga profile ang hihilingin sa isang pagkakataon, hanggang 49."
Ginagawa ko pa rin ang karagdagan na ito at plano kong ilabas ito sa publiko. Sumulat kung interesado ka.