Çözüldü Youtube PubSubHubbub Push Notifications çalışmıyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

özgün deniz

Kilopat
Katılım
3 Aralık 2017
Mesajlar
2.425
Makaleler
1
Çözümler
34
Buradaki (Subscribe to Push Notifications | YouTube Data API | Google for Developers) yönergeleri takip edip. Kayıt oluyorum. Python ile Flask uygulaması yapıp Ngrok ile Web'e çıkardım.

Python:
import asyncio
import xmltodict
from xml.parsers.expat import ExpatError
import aiohttp
from discord import Webhook
from flask import Flask, request
from tivtech.WebhookConfig import CONFIG as config


app = Flask(__name__)




@app.route("/feed", methods=["GET", "POST"])
def feed():
    async def send_message(content):
        async with aiohttp.ClientSession() as session:
            webhook = Webhook.from_url(config.webhook_url, session=session)
            await webhook.send(content=content, username="Foo")


    challange = request.args.get("hub.challenge")
    if challange:
        return challange
    try:
        xml_dict = xmltodict.parse(request.data)
        channel_id = xml_dict["feed"]["entry"]["yt:channelId"]
        print(channel_id)
        if channel_id != config.youtube_channel_id:
            return "", 403
        video_url = xml_dict["feed"]["entry"]["link"]["@href"]
        loop = asyncio.get_event_loop()
        response = loop.run_until_complete(send_message(content=video_url))
    except (ExpatError, LookupError):
        print("Error")
        return "", 403
    return "", 204




if __name__ == "__main__":
    app.run()


https://pubsubhubbub.appspot.com/subscribe sayfasından da callback url'i "ngrokurl/feed" ayarladım.
Topic'i de https://www.youtube.com/xml/feeds/videos.xml?channel_id=CHANNEL_ID 'ye uygun olarak ayarladım.

Youtube'un /feed'e attığı GET isteği ile hub.challenge'ı geri return'lüyorum subscribe olurken 200 dönüyor başarılı. Ama sonrasında hiçbir notification gelmiyor.

Yine aynı sayfadan (https://pubsubhubbub.appspot.com/subscribe) aboneliğin durumunu sorguluyorum. State:unverified gözüküyor. Abonelik isteğinden 1 saniye sonra da mismatch error diye bir error görüntüleniyor.

İşin içinden bir türlü çıkamadım.
 
Çözüm
Sorun çok yüksek ihtimalle Ngrok kaynaklı. Ngrok'u bir hesaba bağlamanız gerek. Yani giriş yapmanız gerek. Bunu yaptıktan sonra sorunum düzeldi ancak kodumda da değişiklik yapmıştım test amaçlı ama onun sebep olduğunu düşünmüyorum yine de paylaşayım.

Yakın zamanda bir rehber de gelecek konu ile alakalı. Türkçe'yi geçtim İngilizce kaynak yok.

Python:
from flask import Flask
from flask import request

app = Flask(__name__)

@app.route("/", methods=['GET', 'POST'])
def sa():
    return 'as'


@app.route("/feed", methods=['GET', 'POST'])
def feed():
    challenge = request.args.get('hub.challenge')

    if (challenge):
        return challenge

    print(request.data)

    return '', 204

app.run()
Subscribe isteğine bir şey yapmıyor ama o geliyor, olabilir mi?
Bence siz abone olma isteği gönderdiğinizde beklemeye alıyor ve callback gerçekten var mı diye kontrol ettiğinde de ngrok isteği engellediğinden doğrulayamıyor.
Ancak bu fikrim sadece bir düşünce.
 
Subscribe benim isteğim ile değil Google'ın bana attığı istek ile oluyor. Challenge yolluyor ben de aynısını geri return ediyorum. Burda bir engelleme olduğunu pek sanmıyorum. Eve geçince tekrar kontrol edeceğim.
 
Subscribe benim isteğim ile değil Google'ın bana attığı istek ile oluyor. Challenge yolluyor ben de aynısını geri return ediyorum. Burda bir engelleme olduğunu pek sanmıyorum. Eve geçince tekrar kontrol edeceğim.
Afedersiniz, tam anlamamışım.
Youtube'un /feed'e attığı GET isteği ile hub.challenge'ı geri return'lüyorum subscribe olurken 200 dönüyor başarılı. Ama sonrasında hiçbir notification gelmiyor.
O halde bir engel söz konusu değil.
Python:
if challange:
    return challange
Buradaki challenge verisi nedir acaba? Şuraya baktım da: Youtube PubSubHubBub Integration
 
Her ne kadar kelimeyi yanlış yazmış olsam da YouTube'un aralıklarla attığı bir key sanırım.

Gelen istekteki hub.challenge'ı geri atıyorum.
Sorunun kaynağı hub.challenge'ın yanlış geri dönülmesiymiş link verdiğim konuya bakacak olursak. Sizde böyle bir sorun yok gibi duruyor kodlara göre, ama flask bir şeyler eklemiyor değil mi döndüğünüz veriye? <html> bile olur bu ekleme.
 
Son düzenleme:
@Nizel G Hocam yardım lazım haftalardır çözmeye çalışıyorum çok fena bunaldım. Ucundan bakabilir misiniz?

Kaydettim, en yakın zamanda bakacağım.
 

Geri
Yukarı