Python Twitter App Ve Kodda Değişiklik Yapmak
-
Twitter hesaplarımın aktif kalması için bir app arıyordum. Twitter github sayfasında şu örnek var: https://github.com/twitterdev/dog-facts Python ile yazılmış. App'e izin verirseniz köpekler hakkında 1 kere tweet atıyor. Çalışan versiyonu şurada deneyebilirsiniz: https://tweet-a-dog-fact.glitch.me/ Çalıştırdım, güzel çalışıyor. Fakat 1 kereden daha fazla tweet atmasını istiyorum. 12 saatte 1 atmaya devam etse harika olur. Python üstatlarının yardımına ihtiyacım var.Chatgpt'ye sordum server.py dosyasını şöyle düzeltti ama çalışacak mı emin değilim:
import base64 import hashlib import os import re import json import requests import time from requests.auth import AuthBase, HTTPBasicAuth from requests_oauthlib import OAuth2Session, TokenUpdated from flask import Flask, request, redirect, session, url_for, render_template app = Flask(__name__) app.secret_key = os.urandom(50) client_id = os.environ.get("CLIENT_ID") client_secret = os.environ.get("CLIENT_SECRET") auth_url = "https://twitter.com/i/oauth2/authorize" token_url = "https://api.twitter.com/2/oauth2/token" redirect_uri = os.environ.get("REDIRECT_URI") # Set the scopes scopes = ["tweet.read", "users.read", "tweet.write", "offline.access"] # Create a code verifier code_verifier = base64.urlsafe_b64encode(os.urandom(30)).decode("utf-8") code_verifier = re.sub("[^a-zA-Z0-9]+", "", code_verifier) # Create a code challenge code_challenge = hashlib.sha256(code_verifier.encode("utf-8")).digest() code_challenge = base64.urlsafe_b64encode(code_challenge).decode("utf-8") code_challenge = code_challenge.replace("=", "") def make_token(): return OAuth2Session(client_id, redirect_uri=redirect_uri, scope=scopes) def parse_dog_fact(): url = "http://dog-api.kinduff.com/api/facts" dog_fact = requests.request("GET", url).json() return dog_fact["facts"][0] def post_tweet(payload, token): print("Tweeting!") return requests.request( "POST", "https://api.twitter.com/2/tweets", json=payload, headers={ "Authorization": "Bearer {}".format(token["access_token"]), "Content-Type": "application/json", }, ) @app.route("/") def hello(): return render_template("index.html") @app.route("/start") def demo(): global twitter twitter = make_token() authorization_url, state = twitter.authorization_url( auth_url, code_challenge=code_challenge, code_challenge_method="S256" ) session["oauth_state"] = state return redirect(authorization_url) @app.route("/oauth/callback", methods=["GET"]) def callback(): code = request.args.get("code") token = twitter.fetch_token( token_url=token_url, client_secret=client_secret, code_verifier=code_verifier, code=code, ) doggie_fact = parse_dog_fact() payload = {"text": "{}".format(doggie_fact)} response = post_tweet(payload, token).json() posted_fact = response['data']['text'] return render_template("thank-you.html", value=posted_fact) if __name__ == "__main__": app.run() while True: time.sleep(12 * 60 * 60) doggie_fact = parse_dog_fact() payload = {"text": "{}".format(doggie_fact)} response = post_tweet(payload, token).json() posted_fact = response['data']['text'] print(f"New tweet posted: {posted_fact}")
-
time.sleep(12 * 60 * 60)
Hocam zaten 12 saatte bir atıyor gibi görünüyor şu anda? -
FrodoTheYuzuksuz bunu yazdı
time.sleep(12 * 60 * 60)
Hocam zaten 12 saatte bir atıyor gibi görünüyor şu anda?Bu düzeltilmiş haliymiş zaten. Çalışması lazım.
Ama api yüzünden crash verirse yeniden deneyecek bir mekanizma yok gibi.
-
end bunu yazdıFrodoTheYuzuksuz bunu yazdı
time.sleep(12 * 60 * 60)
Hocam zaten 12 saatte bir atıyor gibi görünüyor şu anda?Bu düzeltilmiş haliymiş zaten. Çalışması lazım.
Ama api yüzünden crash verirse yeniden deneyecek bir mekanizma yok gibi.
hee gözümden kaçmış.
Son tweet zamanı bir text dosyasına kaydedilebilir. O tweet dosyasının üzerinden 12 saat geçince paylaşım yapılır, zaman damgası düzenlendir.. Ama ben olsam şöyle yapardım,
@app.route("/send", methods=["GET"]) def send():
doggie_fact = parse_dog_fact() payload = {"text": "{}".format(doggie_fact)} response = post_tweet(payload, token).json() posted_fact = response['data']['text'] print(f"New tweet posted: {posted_fact}")
return "hasstikr be rıfat abi"if __name__ == "__main__": app.run()
Kodu bu şekilde değiştirip send route ekledikten sonra 12 saatte bir cron-job.org sitesinden site.com/send adresi tetiklenecek şekilde işlem yaptırabilirsiniz.
İlla zorluk istiyorum derseniz aşağıdaki linkteki İş Zamanlama (Scheduling Jobs) kısmına bakabilirsiniz.
https://emregeldegul.com.tr/2022/07/flask-uygulamalarinda-redis-queue-ile-asenkron-task-yonetimi/
-
FrodoTheYuzuksuz bunu yazdıend bunu yazdıFrodoTheYuzuksuz bunu yazdı
time.sleep(12 * 60 * 60)
Hocam zaten 12 saatte bir atıyor gibi görünüyor şu anda?Bu düzeltilmiş haliymiş zaten. Çalışması lazım.
Ama api yüzünden crash verirse yeniden deneyecek bir mekanizma yok gibi.
hee gözümden kaçmış.
Son tweet zamanı bir text dosyasına kaydedilebilir. O tweet dosyasının üzerinden 12 saat geçince paylaşım yapılır, zaman damgası düzenlendir.. Ama ben olsam şöyle yapardım,
@app.route("/send", methods=["GET"]) def send():
doggie_fact = parse_dog_fact() payload = {"text": "{}".format(doggie_fact)} response = post_tweet(payload, token).json() posted_fact = response['data']['text'] print(f"New tweet posted: {posted_fact}")
return "hasstikr be rıfat abi"if __name__ == "__main__": app.run()
Kodu bu şekilde değiştirip send route ekledikten sonra 12 saatte bir cron-job.org sitesinden site.com/send adresi tetiklenecek şekilde işlem yaptırabilirsiniz.
İlla zorluk istiyorum derseniz aşağıdaki linkteki İş Zamanlama (Scheduling Jobs) kısmına bakabilirsiniz.
https://emregeldegul.com.tr/2022/07/flask-uygulamalarinda-redis-queue-ile-asenkron-task-yonetimi/
https://pypi.org/project/flask-crontab/
Sendleme için route oluşturup 3rd party bir hizmetle request atmak benim de tercihim olurdu bu arada.
-
end bunu yazdı
https://pypi.org/project/flask-crontab/
Sendleme için route oluşturup 3rd party bir hizmetle request atmak benim de tercihim olurdu bu arada.
Sonuna kadar redisciyiz.
Ha bu arada bir önceki mesajına istinaden; tekrar deneyecek mekanizmalar var en basit örnek: supervisor, serviced
-
Twitter artık affetmiyor direkt hesapların kapanır hocam. Çok ciddi sıkıntı var elon musk dan sonra kimsenin gözünün yaşına bakmıyor. Bariz bot gibi davranırsa kullandığın SDK. Hesaplarına da browser dan giriş yapmazsan hesapların gümler haberin olsun.
-
FrodoTheYuzuksuz bunu yazdıend bunu yazdı
https://pypi.org/project/flask-crontab/
Sendleme için route oluşturup 3rd party bir hizmetle request atmak benim de tercihim olurdu bu arada.
Sonuna kadar redisciyiz.
Ha bu arada bir önceki mesajına istinaden; tekrar deneyecek mekanizmalar var en basit örnek: supervisor, serviced
Makineye her kurulan program bir külfettir. Minimum gereksinimle çözmek yeğdir, en azından bazı durumlarda.
Adam sırf 12 saatte 1 çalışacak diye gitsin redis mi kursun
Basit bir try except ve async stack ile çözersin be hocam 😜
end tarafından 11/May/23 12:32 tarihinde düzenlenmiştir -
end bunu yazdı
Makineye her kurulan program bir külfettir. Minimum gereksinimle çözmek yeğdir, en azından bazı durumlarda.
Adam sırf 12 saatte 1 çalışacak diye gitsin redis mi kursun
Basit bir try except ve async stack ile çözersin be hocam 😜
Ben sunucuya kuracak diye düşünüyordum :D vercel falan beleş sağlıor, req. olarak belirtsin dışardan tetikletsin :D
Pc konusunda katılıyorum, bende dockeri tercih etmeye çalışıyorum mümkün mertebe.
-
time sleep değil de cron ile daha doğru olur
-
MhmdAlmz bunu yazdı
Twitter artık affetmiyor direkt hesapların kapanır hocam. Çok ciddi sıkıntı var elon musk dan sonra kimsenin gözünün yaşına bakmıyor. Bariz bot gibi davranırsa kullandığın SDK. Hesaplarına da browser dan giriş yapmazsan hesapların gümler haberin olsun.
Hocam aslında bu bot değil de app diye geçtiği için banlanmama konusunda ümitliyim. Bot da kullanıyorum çok fazla banlanan hesabım oldu. Dediğin gibi tarayıcıdan giriş belli bir süre olmazsa ve aynı ip'den yoğun rt fav takip olayına girdiğinde hesabın kurtuluşu yok.