526 o'qishlar
526 o'qishlar

Sizga kerak bo'lmasligi uchun barcha yomon yangiliklar sarlavhalarini o'qiydigan bot bilan tanishing

tomonidan Raymond Camden6m2025/03/23
Read on Terminal Reader

Juda uzoq; O'qish

Diffbotning bilim grafigi oddiy maqsadga ega - ma'lumotlar va munosabatlarga urg'u beradigan qidiruv orqali barcha bilimlarning umumiy yig'indisini barmoq uchingizga yetkazing.
featured image - Sizga kerak bo'lmasligi uchun barcha yomon yangiliklar sarlavhalarini o'qiydigan bot bilan tanishing
Raymond Camden HackerNoon profile picture

Diffbotning bilim grafigi oddiy maqsadga ega - oddiy matnga asoslangan qidiruv tizimi tajribasi orqali ma'lumotlar va munosabatlarga urg'u beradigan qidiruv orqali barcha bilimlar yig'indisini barmoqlaringiz uchiga yetkazing. Butun internetdan olingan Knowledge Graph sizga oddiy API orqali bir zumda milliardlab maʼlumotlar nuqtalariga nisbatan murakkab soʻrovlarni amalga oshirish imkonini beradi. Men ularning API-larini sinab ko'rishga va "nisbatan" oddiy vositani - avtomatlashtirilgan platformada ishlaydigan mahsulot uchun yangiliklar tahlilini yaratishga qaror qildim. Oson bo'lishi kerak, to'g'rimi? Keling, bunga o'taylik. E'tibor bering, ushbu blog postidagi misollarda siz Diffbot-dan bepul kalit olgansiz deb taxmin qilinadi. Namunalarni sinab ko'rishdan oldin buni amalga oshirganingizga ishonch hosil qiling.

So'rovni loyihalash

Kod qatorini yozishdan oldin, men Diffbot-ga kirdim va bilim grafigi uchun vizual qidiruv vositasini ochdim. Asbob so'rovlarni vizual yoki qo'lda yaratishga imkon beradi. So'rovlar Diffbot-da "DQL" iboralari sifatida tanilgan va sintaksisni ilgari hech qachon ko'rmagan bo'lsangiz ham o'qish juda oson.


Vizual soʻrovlar yaratuvchisining skrinshoti, hech qanday variant tanlanmagan


Ushbu vositadan men ob'ekt turini tanlashdan boshladim. Bu men qidirmoqchi bo'lgan yuqori darajadagi ma'lumotlar turi va ko'plab variantlardan biri bo'lishi mumkin, odamlardan voqealargacha, filmlar va investitsiyalar. Men "Maqola" ni tanladim, chunki mening maqsadim mening ajoyib mahsulotim haqida yomon gapiradigan yangiliklarni topishdir. Keyin men "Filtr bo'yicha" variantini tanladim. Ob'ekt turidagi istalgan xususiyat bo'yicha filtrlash mumkin bo'lsa-da, men tags.label foydalandim, chunki bu oddiy matn qidiruvidan ko'ra aniqroq mos keladi. Matn filtri ishlayotgan bo'lsa-da, tags.label dan foydalanish natijalarni shunchaki eslatib o'tmasdan, mening qidiruvimga qaratilganligini ta'minlash orqali ancha yaxshi natija beradi. Demo uchun men "XBox" haqidagi maqolalarni qidiraman.


Bundan tashqari, eng yangisini birinchi boʻlib koʻrsatish uchun “Sort boʻyicha” qiymatidan foydalandim va natijalarim mantiqiy yoki yoʻqligini bilish uchun bu hit qidiruvidan foydalandim.


Qidiruv natijalari ko'rsatilgan


Mening dastlabki natijalarim chet tilidagi natijalarni o'z ichiga olmasa-da, men ingliz tilidagi natijalar bo'yicha filtrlashni xohlayotganimni bilardim, shuning uchun keyin til uchun filtr qo'shdim. Joriy filtr orqali + belgisini bosib, men ingliz tili uchun til va en qo'shishga muvaffaq bo'ldim. Yana bir bor qidiruvni bosdim:


Qidiruv natijalari ko'rsatilgan, endi ingliz tiliga filtrlangan


Mayli, keyin men faqat salbiy natijalarni filtrlashni xohlayman. Ma'lumot grafigi maqolasi ob'ektlari hissiyot balliga ega (ularni qidiruv natijalarida ko'rishingiz mumkin) -1 dan eng salbiy 1 dan eng ijobiygacha. Dastlab, men 0 dan kam yoki unga teng hissiyotli elementlarni tanladim.


Qidiruv natijalari koʻrsatilgan, endi salbiy fikrlar bilan ingliz tiliga filtrlangan


Voot, yetib bor. Yakuniy qadam sifatida men bu avtomatlashtirilib, “oxirgi” elementlarga filtrlanishini bilardim, shuning uchun men yana bitta filtr qo‘shdim, bu safar date , after tanlangan va bir hafta oldingi sanani tanladim.


Qidiruv natijalari ko'rsatilgan, endi salbiy his-tuyg'ular va sana filtri bilan ingliz tiliga filtrlangan


Ushbu nuqtada so'rov yaxshi ko'rinadi, shuning uchun asbob tomonidan taqdim etilgan so'rov qiymatini nusxa ko'rsatamiz:


 type:Article tags.label:"Xbox" language:"en" sentiment<=0 date>"2025-03-03" sortBy:date

Kodni yozing

So'rovni loyihalash haqiqatan ham qiyin qism edi. Kod uchun men qidiruv hujjatlariga bordim. Misollar curl/HTTP-ga asoslangan, ammo Python yoki boshqa tilga o'tkazish juda oson. Ushbu namunani ko'rib chiqing:


 import os import requests import json import urllib.parse token = os.environ.get("db_token") query = 'type:Article tags.label:"Xbox" language:"en" sentiment<=0 date>"2025-03-03" sortBy:date' apiCall = f"https://kg.diffbot.com/kg/v3/dql?type=query&token={token}&query={urllib.parse.quote(query)}&size=25" req = requests.get(apiCall) results = json.loads(req.content) print(f"Total results, {results['hits']}") for result in results["data"]: print(result["entity"]["title"]) print(result["entity"]["date"]["str"]) print(result["entity"]["summary"]) if "author" in result["entity"]: print(result["entity"]["author"]) print(result["entity"]["siteName"]) print(result["entity"]["pageUrl"]) print(result["entity"]["sentiment"]) print("------------------------------------")


Buni sindirish - men so'rovimni vizual vositadan boshladim. Bu url kodlangan bo'ladi va API uchun Knowledge Graph uchun uzatiladi. Yagona haqiqiy yangi element - natijani oqilona chegarada ushlab turish uchun size=25 qo'shilishi.


Men APIga qo'ng'iroq qilaman, topilgan jami natijalarni chop etaman ( hits natijasi bo'yicha) va keyin natijadan turli xil ma'lumotlarni ko'rsatadigan har birini takrorlayman. Mana bir nechta natijalar:


 Total results, 68 Xbox will release its first handheld gaming console this year, report claims d2025-03-10T19:37 Windows Central expects the console to take advantage of the widgets on the Xbox Game Bar to let use... Jacob Siegal BGR https://bgr.com/entertainment/xbox-will-release-its-first-handheld-gaming-console-this-year-report-claims/ 0 ------------------------------------ Rumour: Next-Gen Xbox a 'PC in Essence' - What Would That Mean for PlayStation? d2025-03-10T19:00 Recent comments from Windows Central's executive editor Jez Corden have sparked discussion about whe... Stephen Tailby Push Square https://www.pushsquare.com/news/2025/03/rumour-next-gen-xbox-a-pc-in-essence-what-would-that-mean-for-playstation 0 ------------------------------------ Xbox handheld out this year and will go up against Nintendo Switch 2 says source d2025-03-10T18:50 New rumours about Microsoft's next gen plans suggests that there will be two Xbox handheld consoles ... GameCentral Metro http://metro.co.uk/2025/03/10/xbox-handheld-this-year-will-go-nintendo-switch-2-says-source-22703266/ 0


Bu ishlaydi, lekin endi sanani dinamik qilaylik. datetime dan import qilishni boshladim:


 from datetime import datetime, timedelta


Keyin o'tgan hafta uchun formatlangan sanani yaratdim:


 today = datetime.now() lastWeek = today + timedelta(days=-7) fLastWeek = lastWeek.strftime("%Y-%m-%d")


Va oxirgi qism mening so'rovimga o'sha sanani kiritish edi:


 query = f'type:Article tags.label:"Xbox" language:"en" sentiment<=0 date>{fLastWeek} sortBy:date'


Dastlabki versiya uchun toʻliq manba kodini bu yerda va oxirgi versiyasini bu yerda koʻrishingiz mumkin.

Avtomatlashtirishni qurish

Mayli, buni avtomatlashtirish vaqti keldi. Avtomatlashtirish uchun men o'tmishda ko'p marta ishlatgan ajoyib moslashuvchan ish oqimi tizimi Pipedream dan foydalanaman. Mana, har bir qism tuzilgan butun ish jarayoni:


Ish jarayoni diagrammasi


Men ish jarayonini oddiy jadvalga asoslangan trigger, ya'ni qachon ishga tushirish bilan boshladim. Bu biroz o'zboshimchalik edi, lekin men har hafta yakshanba kuni soat 13:00 da tanladim.


Keyingi qadam, getArticles men ilgari ko'rsatgan mantiqni boshqaradi, ammo endi Pipedream ish oqimida kod qadamlarini yozishning standart usuli bo'lgan "Pipedream ishlov beruvchisi" da.


 import os import requests import json from datetime import datetime, timedelta import urllib.parse def handler(pd: "pipedream"): token = os.environ.get("db_token") today = datetime.now() lastWeek = today + timedelta(days=-7) fLastWeek = lastWeek.strftime("%Y-%m-%d") query = f'type:Article tags.label:"Xbox" language:"en" sentiment<=0 date>{fLastWeek} sortBy:date' apiCall = f"https://kg.diffbot.com/kg/v3/dql?type=query&token={token}&query={urllib.parse.quote(query)}&size=25" req = requests.get(apiCall) return json.loads(req.content)


Keyingi qadam, agar hech qanday natija topilmasa, ish jarayonini tugatish uchun tezkor kod qadamidir:


 def handler(pd: "pipedream"): if len(pd.steps["getArticles"]["$return_value"]["data"]) == 0: pd.flow.exit("No results")


Endi men natijalarni biroz "massaj" qilmoqchiman. Oxir-oqibat men buni o'zimga elektron pochta orqali yubormoqchiman, shuning uchun natijalarni chiroyli qatorda formatlash uchun qadam yaratdim:


 from datetime import datetime def handler(pd: "pipedream"): email = f""" Negative Article Results: Our search found {pd.steps["getArticles"]["$return_value"]["hits"]} results. Here are the top 25: """ for result in pd.steps["getArticles"]["$return_value"]["data"]: date = datetime.fromtimestamp(result["entity"]["date"]["timestamp"] / 1000) date_f = date.strftime("%Y-%m-%d") email += f""" {result["entity"]["title"]} Sentiment: {result["entity"]["sentiment"]} Published: {date_f} Link: {result["entity"]["pageUrl"]} """ return email


Shunga qaramay, bu men kiritish uchun etarlicha muhim deb o'ylagan narsam nuqtai nazaridan biroz o'zboshimchalikdir. Siz, albatta, ko'proq qiziquvchan bo'lishingiz va hatto "juda yomon kayfiyatda, rang qo'shing, qizil bayroqlar va hokazo" kabi narsalarni qilishingiz mumkin.


Yakuniy qadam natijalarni elektron pochta orqali yuborish edi. Pipedream "hisob qaydnomasi egasiga elektron pochta xabarini yuborish" qadamini qo'llab-quvvatlaydi, bu esa buni amalga oshiradi, menga elektron pochta xabarini yuboradi. Agar men buni mijoz uchun yaratgan bo'lsam, pochta API'lari uchun Pipedream o'rnatilgan ko'plab qadamlaridan birini ishlatgan bo'lardim.


Ishga tushgandan so'ng, maqolalar ro'yxati va ularning kayfiyati bilan yaxshi elektron pochta xabarini olaman:


Elektron pochta namunasi


Agar siz Pipedreamga aylanishni tanlasangiz, mening ish jarayonimni bu yerda topishingiz mumkin: https://github.com/cfjedimaster/General-Pipedream-AI-Stuff/tree/production/report-on-sentiment-p_gYCeNbG

Keyingi nima?

Bu Diffbot's Knowledge Graph API-dan foydalanishning faqat bir misolidir va eslatib o'tmoqchimanki, maqolalar siz qidirishingiz mumkin bo'lgan turli xil ma'lumotlardan faqat bittasi. Bu yerda qilgan hamma narsa ham mutlaqo bepul hisobda amalga oshirildi, shuning uchun siz mutlaqo ro'yxatdan o'tishingiz va o'zingiz sinab ko'rishingiz mumkin. Men bu haqda ko'proq ma'lumot beraman, shuning uchun savollaringiz bo'lsa, menga xabar bering!

L O A D I N G
. . . comments & more!

About Author

Raymond Camden HackerNoon profile picture
Raymond Camden@raymondcamden
Father, husband, web nerd who builds too many cat-based demos. Love Jamstack, serverless, JavaScript, Python.

TEGI QILISH

USHBU MAQOLA TAQDIM ETILGAN...

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks