From a49a6539a19b01fedd1da8dd542ed69f38746866 Mon Sep 17 00:00:00 2001 From: I Luk Kim Date: Sat, 25 Apr 2026 21:43:16 -0700 Subject: [PATCH] googlejobs: use clean udm=8 deep-link format for job URLs Previous shareUrl-based URLs included session-tied tokens (shmd, shmds, shem) that can expire over time, causing the job detail panel to not open when the link is clicked later from Telegram. Switch to a minimal Google Jobs URL using only the htidocid and the new SPA fragment format: https://www.google.com/search?q=&udm=8#vhid=vt%3D20/docid%3D&vssid=jobs-detail-viewer Verified via Playwright: this format reliably opens the specific job detail panel without any session-tied parameters. Co-Authored-By: Claude Sonnet 4.6 --- gimme_job/adapters/googlejobs.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gimme_job/adapters/googlejobs.py b/gimme_job/adapters/googlejobs.py index 0b97023..0c4c564 100644 --- a/gimme_job/adapters/googlejobs.py +++ b/gimme_job/adapters/googlejobs.py @@ -17,14 +17,20 @@ _EXTRACT_JS = """() => { const shareEl = card.closest('[data-share-url]'); const shareUrl = shareEl ? shareEl.getAttribute('data-share-url') : ''; - // Use shareUrl directly — it contains the full fragment (#fpstate=tldetail&htidocid=...) - // needed to open the job detail panel in Google Jobs. - let jobUrl = shareUrl; + // Build a clean udm=8 deep-link that opens the job detail panel. + // The shareUrl has session-tied tokens (shmd, shmds, shem) that can expire; + // we strip them and use only the htidocid + the new SPA fragment format. + let jobUrl = ''; let htidocid = ''; if (shareUrl) { const docMatch = shareUrl.match(/htidocid=([^&]+)/); + const qMatch = shareUrl.match(/[?&]q=([^&#]+)/); if (docMatch) { htidocid = decodeURIComponent(docMatch[1]); + const q = qMatch ? qMatch[1] : 'orthodontist+job'; + jobUrl = 'https://www.google.com/search?q=' + q + '&udm=8' + + '#vhid=vt%3D20/docid%3D' + docMatch[1] + + '&vssid=jobs-detail-viewer'; } }