Üç bölümlük bir serinin üçüncü bölümünü okuyorsunuz. Bu bölüme geçmeden önce önceki iki makaleyi okumanız önemle tavsiye edilir!
Önceki blogun sonunda Flix-Finder, çeşitli ajansların derecelendirme parametrelerine dayalı olarak film aramalarını destekliyordu. Uygulamamızın işlevselliği beklentileri karşıladı ve amacına ulaştı. Ancak bir süre sonra Flix-Finder'ın müşterileri, uygulamanın filmlerle ilgili en güncel bilgileri sağlamadığından yakınmaya başladı. Flix-Finder statik veriler kullandığından bu bizim öngördüğümüz bir şeydir.
Flix-Finder'ın, film verilerinin yeni filmleri yansıtacak şekilde güncellenebileceği bir işleme ihtiyacı var. Ve bu, bu son bölümde uygulayacağımız bir şey!
Bu işlevselliği uygulamanın çeşitli yolları olmasına rağmen verileri güncellemek için kullanılabilecek yeni bir uç nokta oluşturacağız. Verileriniz tıpkı bir düğmeye bastığınızda olduğu gibi anında değişir. Ancak cronjob kullanmak gibi başka stratejiler de var. Bu blogda bir stratejinin özellikleri açıklandıktan sonra, aynı kavramlar kullanılarak herhangi bir yeni teknik kolaylıkla oluşturulabilir.
Kodlamaya başlamadan önce bir adım geriye gidelim ve tüm gereksinimlerimizi anlayalım.
Yeni bir uç nokta oluşturmak istiyoruz ve bu uç noktaya ulaşıldığında Flix-Finder'ın kullandığı veriler güncellenmelidir. /update
uç noktasını kullanalım ve bu uç noktaya isabet eden herhangi bir GET isteği, uygulamamızın kullandığı verileri güncellemelidir.
Arayüz planlandıktan sonra şimdi ' Veriler nasıl güncellenir?' konusunu düşünelim. ' .
(1) Toplayıcıları Parlak Verilerde Yeniden Çalıştırın
(2) Toplayıcıyı çalıştırarak elde edilen sonuçları alın
(3) Sonuçların statik dosyaların üzerine yazılması
İlk iki adım için Bright Data'nın sağladığı API'leri kullanabiliriz. Verileri aldıktan sonra, mevcut statik dosyaların üzerine yazmak için vanilya Python'u kullanabiliriz.
Harika! Her şey planlandıktan sonra uygulamaya başlayalım.
Django'daki tavsiye uygulamasının view.py
dosyasında yeni bir yöntem oluşturarak başlayın. Bu yönteme updateData
adını vereceğiz. Statik verileri güncelleme mantığımızın tamamı burada yer alacaktır.
# recommender/views.py def update(request): # TODO: Implement this method return HttpResponse("Movie Data Updated!")
Biz de görüşlerimizi belirleyelim. Yeni oluşturulan yöntemin eşlemesini görünümlere eklememiz gerekiyor.
# recommender/urls.py from django.urls import path from . import views urlpatterns = [ path("", views.index, name = "index"), path("update", views.updateData, name = "update data") ]
Bununla Flix-Finder'da başarıyla yeni bir uç nokta oluşturduk. Statik verileri güncellemek için bu uç noktayı kullanacağız. Şimdilik bu uç nokta hiçbir şey yapmıyor ve yalnızca bir String mesajı döndürüyor.
➜ ~ curl localhost:8000/update Movie Data Updated!
Bright Data'nın API'sini veri güncellemesi için kullanmaya başlamadan önce bir API Token oluşturmamız gerekiyor.
Bright Data'ya yapılan tüm iletişimler bu belirteci içermelidir ve kimlik doğrulama amacıyla kullanılır.
API Token oluşturma adımları:
Add Token
butonuna tıklayın.
API Simgenizi sızdırmadığınızdan emin olun. API Token'ınıza erişimi olan herkes sizi Bright Data'da tam anlamıyla taklit edebilir!!!
API Token oluşturulduktan sonra toplayıcıları çalıştırmak ve toplayıcı çalıştırmalarından veri almak için API'leri kullanmaya hazırız.
Koleksiyonerlerinizin API ile Başlat bölümüne gidin.
Burada toplayıcıları yeniden çalıştırmak ve sonuçları almak için kullanabileceğiniz curl isteklerini bulacaksınız.
Toplayıcı çalışmasını başlatmak için API: Bright Data, toplayıcı çalışmasını başlatmak için bir uç nokta sağlar. https://api.brightdata.com/dca/trigger_immediate
uç noktası bir POST isteği bekliyor. Ayrıca, toplayıcıyı benzersiz şekilde tanımlamak için kullanılan ' toplayıcı ' sorgu parametresini de bekler. Başlık, API belirtecini içermelidir.
İşte aynısı için kıvrılma isteği.
curl -H "Authorization: Bearer API_TOKEN" -H "Content-Type: application/json" -d '{}' "https://api.brightdata.com/dca/trigger_immediate?collector=c_rj3i0wspnhr0ataba"
Bu uç noktanın yanıtı bir yanıt kimliğidir. Bu daha sonra sonuçları almak için kullanılabilir.
Bir toplayıcının çalışmasından sonuçları almak için API: Bir toplayıcının çalıştırılmasından elde edilen yanıt kimliğiyle Bright Data, toplayıcı çalıştırmasından sonuçları almak için bize başka bir API sağlar. https://api.brightdata.com/dca/get_result
uç noktası bir GET isteği bekliyor. Ayrıca toplayıcıyı benzersiz şekilde tanımlamak için kullanılan 'response_id' sorgu parametresini de bekler. Başlık, API belirtecini içermelidir.
Bu uç nokta için kıvrılma isteğinin nasıl görüneceği aşağıda açıklanmıştır.
curl "https://api.brightdata.com/dca/get_result?response_id=RESPONSE_ID" -H "Authorization: Bearer API_TOKEN"
Kullanılacak uç noktalar ve API belirteci hakkında bilgi sahibi olduğumuzda, güncelleme uç noktasını uygulamaya başlayabiliriz.
(1) Toplayıcıları Parlak Verilerde Yeniden Çalıştırın
(2) Toplayıcıyı çalıştırarak elde edilen sonuçları alın
(3) Sonuçların statik dosyaların üzerine yazılması
Öncelikle yeniden çalıştırılan toplayıcı API'sini kullanmamız ve bir yanıt kimliği almamız gerekiyor. Bu görevi gerçekleştirmek için Python'un istek kütüphanesini kullanacağız.
API_TOKEN = "###########" # Replace by your API Token response = requests.post( "https://api.brightdata.com/dca/trigger_immediate?collector=c_rj3i0wspnhr0ataba", headers={"Authorization": f"Bearer {API_TOKEN}", "Content-Type": "application/json"}, json={} ) if response.status_code < 200 or response.status_code > 299 or 'response_id' not in response.json(): return HttpResponseServerError('Something Wrong Happened') response_id = response.json().get('response_id')
Sonraki adım, sonuçları almak için yanıt kimliğini kullanmaktır. Sonuçları almaya çalışmadan önce bir süre beklerdik.
time.sleep(30) # Sleeping for 30 seconds get_results_response = requests.get( f"https://api.brightdata.com/dca/get_result?response_id={response_id}", headers={"Authorization": f"Bearer {API_TOKEN}"} )
Eldeki verilerle, bu yeni verileri statik dosyanın üzerine yazabiliriz.
movie_data = get_results_response.json() data_file = open(ROTTEN_TOMATO_DATA_FILE_PATH, encoding="utf8", mode="w") json.dump(movie_data, data_file, indent=4) data_file.close()
Böylece güncelleme yönteminin uygulanması tamamlanır.
Veri güncelleme sürecini başlatmak için localhost:8000/update
uç noktasına basit bir curl isteği yapılabilir. API geri döndüğünde veriler güncellenirdi.
➜ ~ curl localhost:8000/update Movie Data Updated!
Sonunda bu bölümün sonucuna ulaştık. Flix-Finder'a veri güncelleme işlevini entegre edebildik. Sonuç olarak, Flix-Finder'ımız her zaman yeni verilerle kullanıcılarının kullanımına açık olacak!
Umarım üç bölümlük seriyi beğenmişsinizdir. Bu Github deposu, koleksiyonun tamamının kaynak kodunu içerir.
Bu tür harika makalelerin devamı için beni HackerNoon'da takip edebilirsiniz. Bir sonraki yazıda görüşmek üzere… O zamana kadar Mutlu Öğrenmeler! 🙂