मैं हाल ही में
टेलीग्राम में प्रोग्रामरों के एक समुदाय में बैठा और एक बहुत ही दिलचस्प प्रोफ़ाइल पर ध्यान दिया। निम्नलिखित उत्सुक थे - मुख्य फोटो में उन्होंने वर्तमान समय को दर्शाया था। मुझे इस बात में बहुत दिलचस्पी थी कि उन्होंने इसे कैसे हासिल किया, और मैंने एक ही कार्यक्रम लिखने के लिए हर कीमत पर फैसला किया।
इससे पहले, मैंने अक्सर टेलीग्राम बॉट्स के साथ
PyTelegramBotAPI लाइब्रेरी का उपयोग करके काम किया था, इसलिए मैंने सुझाव दिया कि इस तरह का एक फ़ंक्शन बॉट एपीआई में है। निश्चित रूप से, यह मेरे जीवन में एक गूढ़ धारणा थी, क्योंकि फोटो
उपयोगकर्ता के प्रोफ़ाइल चित्र पर था, न कि बॉट - और जल्द ही मैं इस बात से आश्वस्त हो गया, प्रोफ़ाइल फ़ोटो को बदलने की क्षमता के लिए किसी और चीज का पता नहीं लगा।
मैंने इंटरनेट पर सर्फ करना शुरू किया और एक सुविधाजनक उपकरण -
टेलीथॉन के पार आया। उन्होंने मुझे टेलीग्राम में एक
उपयोगकर्ता के रूप में प्रवेश करने की अनुमति दी, न कि एक बॉट के रूप में। खैर, मुझे लगता है कि यह लक्ष्य की ओर पहला और सबसे बड़ा कदम था। अगला, आइए देखें कि हमारी प्रोफाइल पिक्चर पर "क्लॉक" को कैसे बनाया जाए।
पहला कदम। कोड से टेलीग्राम लॉगिन तक पहुँच प्राप्त करें
हम
लिंक का पालन करते हैं, फोन नंबर दर्ज करते हैं, जिसके बाद हमें एक पुष्टिकरण कोड मिलता है। इसके बारे में
यहाँ और पढ़ें। तो, हमें दो चीजें मिलती हैं जो हमारे लिए महत्वपूर्ण हैं - api_id और api_hash। हम
config.py फ़ाइल बनाते हैं और वहां निम्न कोड दर्ज करते हैं:
api_id = < API_ID> api_hash = < API_HASH>
अब
मुख्य फ़ाइल बनाएँ जिसमें हम लिखते हैं:
from telethon import TelegramClient, sync from .config import *
यह महत्वपूर्ण है कि
main.py और
config.py एक ही फ़ाइल स्तर पर हैं, अर्थात एक फ़ोल्डर में, अन्यथा
.config आयात * से लाइन एक त्रुटि देगा।
TelegramClient क्लास वास्तव में वही है जो हमें एक नियमित उपयोगकर्ता के रूप में टेलीग्राम में प्रवेश करने की अनुमति देगा। उसी फ़ाइल में आगे हम निम्नलिखित लिखते हैं:
client = TelegramClient(< >, api_id, api_hash) client.start()
इस प्रकार, हम मान सकते हैं कि हम टेलीग्राम में लॉग इन हैं।
सत्र का नाम आप किसी भी, अपने विवेक पर चुन सकते हैं (उदाहरण के लिए,
"अनानास" )। तो, हम तार से जुड़े हैं। अब तस्वीरों के बारे में सोचने का समय है ...
चरण दो तस्वीरों के लिए एक समय स्रोत बनाएँ
शायद यह कदम मेरे लिए सबसे आसान था, क्योंकि मैं कई सॉफ्टवेयर विकसित कर रहा हूं जो लंबे समय से
कंप्यूटर विजन का उपयोग करता है, और इसलिए, छवियों के साथ काम करना कुछ सामान्य हो गया है। यहां सब कुछ सरल है - हम
opencv पुस्तकालय स्थापित करते हैं, जो आपको फ़ोटो के साथ अद्भुत काम करने की अनुमति देता है।
Utils.py फ़ाइल बनाएँ और
उसमें लिखें:
def convert_time_to_string(dt): return f"{dt.hour}:{dt.minute:02}"
हमें इस फ़ंक्शन की आवश्यकता है ताकि प्रारूप
H: MM में फोटो पर संकेत दिया जाए (ऐसा करने के अन्य तरीके थे, लेकिन मैंने इसे पसंद किया)।
तो, हम फ़ोटो स्वयं बनाना शुरू करते हैं। हम
generate_time_images.py फ़ाइल बनाते हैं और उसमें लिखते हैं:
from .utils import * import cv2 import numpy as np from datetime import datetime, timedelta
ये लाइब्रेरी हमारे लिए समय की मुहर वाली तस्वीरें बनाने के लिए पर्याप्त होनी चाहिए। अगला, हम एक काली पृष्ठभूमि प्राप्त करने के लिए एक फ़ंक्शन लिखते हैं, जिस पर हम समय लिखेंगे:
def get_black_background(): return np.zeros((500, 500))
अब आपको दिनों में प्रत्येक मिनट के लिए चक्र से गुजरना होगा और समय का संकेत देते हुए एक फोटो बनानी होगी।
अग्रिम में
time_images फ़ोल्डर बनाएँ
/ जहाँ आप फ़ोटो सहेजेंगे। तो, हम लिखते हैं:
start_time = datetime.strptime("2019-01-01", "%Y-%m-%d")
फ़ोटो का एक संग्रह बनाने के लिए, केवल एक ही चीज़ बची है -
उत्पन्न करें_टाइम_इमेज़होम चलाएँ। शुरू करने के बाद, हम देखते हैं कि
time_images / फ़ोल्डर में बहुत सारे फ़ोटो दिखाई दिए। आपको इन तस्वीरों की तरह कुछ मिलना चाहिए:
चरण तीन हर मिनट फोटो अपडेट करना
Telethon में एक बहुत ही सुविधाजनक चीज है - जिसे
UploadProfilePhotoRequest कहा जाता है। हम इसे अपने पहले लिखे हुए
मुख्य-लेख में आयात करते हैं:
from telethon.tl.functions.photos import UploadProfilePhotoRequest, DeletePhotosRequest from datetime import datetime from .utils import *
बेशक, हमें किसी भी समय अवतार को अपडेट नहीं करना चाहिए - बस इसे एक मिनट में एक बार करें। ऐसा करने के लिए, हमें उस क्षण को जानना चाहिए जब पुराना मिनट समाप्त होता है और एक नया शुरू होता है - यह इस समय है कि हम फोटो को बदल देंगे। हम
utils.py में एक और छोटा फंक्शन
लिखते हैं :
def time_has_changed(prev_time): return convert_time_to_string(datetime.now()) != prev_time
हां, हां, हम अवतार के पिछले अपडेट के समय के साथ इसे एक स्ट्रिंग पास करते हैं। बेशक, इसे लागू करने के अन्य तरीके थे, लेकिन मैंने यह सब जल्दी में लिखा था, इसलिए मैंने अनुकूलन के बारे में ज्यादा नहीं सोचा। हम अपना
मेनडोम भरना जारी
रखते हैं :
prev_update_time = "" while True: if time_has_changed(prev_update_time): prev_update_time = convert_time_to_string(datetime.now()) client(DeletePhotosRequest(client.get_profile_photos('me'))) file = client.upload_file(f"time_images/{prev_update_time}.jpg") client(UploadProfilePhotoRequest(file))
हमें पिछले अवतार को हटाने के लिए
DeletePhotosRequest की आवश्यकता है, ताकि यह प्रभाव पैदा हो कि हम एक नई तस्वीर नहीं जोड़ते हैं - यह अपने आप बदल जाता है। प्रोसेसर को अधिभार नहीं देने के लिए, आप
समय (एल) को लूप के अंत में जोड़ सकते हैं (निश्चित रूप से, पहले समय-
सीमा को आयात करते
हुए )।
हो गया!
मेनडोमे चलाएं और आपका अवतार एक घड़ी में बदल जाएगा। अधिक मूल विकल्प के रूप में, आप उदाहरण के लिए, फ़ोटो पर पाठ को बदलने का प्रयास कर सकते हैं: