फेसबुक से - Livejournal, Twitter और Vkontakte तक, स्रोत कोड और टिप्पणियों में क्रॉस-पोस्टिंग

इस लेख में मैं अपने फेसबुक से मेरे Livejournal (इसके बाद - LJ) पर क्रॉस-होस्टिंग विकसित करने के अपने अनुभव के बारे में बताऊंगा, और अपने खातों को शुरू करने के लिए तैयार स्रोत ग्रंथों को भी साझा करूंगा

स्क्रिप्ट लिखने का कारण आपकी पोस्ट के माध्यम से खोज करने में सक्षम होना था - एक अवसर जिसे फेसबुक अपनी सेवा के हिस्से के रूप में किसी भी तरह से लॉन्च नहीं कर सकता था, साथ ही साथ इसके एलजे को "पुनरोद्धार" भी कर सकता था। चूंकि फेसबुक पर किसी भी पोस्ट तक पहुंचने के लिए अनिवार्य प्राधिकरण की आवश्यकता होती है, सेवा स्पष्ट रूप से खोज रोबोट की अनुमति नहीं देती है। विशेष रूप से, मेरे मामले में, यह असुविधाजनक है: लिंक, वीडियो और विचार जो मैं सोशल नेटवर्क पर प्रकाशित करता हूं, मैं अक्सर "भविष्य के लिए" प्रकाशित करता हूं - और अक्सर वह क्षण आता है जब यह जानकारी आवश्यक हो जाती है, लेकिन यह शायद ही पाया जा सकता है।

इसके अलावा, यहां प्रकाशित लिपियों का उपयोग करके, मौजूदा फेसबुक प्रविष्टियों के संग्रह को स्थानांतरित करना संभव था: मेरे फेसबुक के 2000 से अधिक संग्रह संदेश इसी तारीखों के साथ लाइवजर्नल में चले गए। यही है, अगर आपके पास एलजे नहीं है, तो आप तुरंत इसे हर समय जानकारी के साथ भर सकते हैं।

इसके अलावा लेख में मैं पर्ल पर तैयार लिपियों को पोस्ट करता हूं, जिसका उपयोग करके आप लाइवजर्नल में फेसबुक स्टेटस प्रसारित कर सकते हैं, और वहां से, यदि आपके पास उपयुक्त सेटिंग्स हैं, तो Vkontakte, Twitter और RSS तक, और लगभग सभी ब्लॉग इंजनों के लिए अतिरिक्त वेब सेवाओं का उपयोग कर सकते हैं।


प्रस्तावना


ऐसा हुआ कि दो साल पहले मैंने फेसबुक पर एलजे छोड़ दिया। यह LiveJournal में बहुत सारी समस्याओं के कारण था, सेवा के विकास के साथ निषेध, और, परिणामस्वरूप, मेरे दोस्तों का वहां से नीले और सफेद सोशल नेटवर्क पर बड़े पैमाने पर प्रस्थान।

इसी समय, एलजे एक लचीली पोस्ट प्रारूप के साथ एकमात्र खुला ब्लॉग साइट बनी हुई है जो महत्वपूर्ण तकनीकी प्रतिबंध नहीं लगाती है - पोस्ट के आकार पर या इसके डिजाइन पर। एलजे में अभी भी बहुत सारे दिलचस्प व्यक्तित्व हैं, जिनमें से कई मेरे दोस्त हैं।

खोज इंजनों के लिए LJ का बहुत बड़ा फायदा था। ब्लॉग पर मैंने जो कुछ भी लिखा है, मैं उसके बाद "खोज इंजन" के माध्यम से पा सकता हूं, और व्यवहार में, पोस्ट के प्रकाशन के कुछ मिनट बाद यैंडेक्स या Google इंडेक्स अपडेट किया जाता है। यह समझना कि आपका लेख, नोट या खोज न केवल आपके दोस्तों के लिए उपयोगी हो सकता है, हमें इस उपयोगी सामान को अधिक से अधिक लिखने के लिए प्रेरित करता है। हालांकि, एक ही तर्क हाबरा के संबंध में काम करता है।

मैंने क्रॉस-शेयरिंग सेवाओं का अध्ययन किया जो स्वचालित रूप से कई सामाजिक नेटवर्क पर संदेश पोस्ट करते हैं। दुर्भाग्य से, उनमें से कुछ भी समझदार नहीं मिला। लगभग हर जगह वे मुझे एक विशेष इंटरफ़ेस में एक पोस्ट लिखने के लिए मजबूर करते हैं, या एलजे का उपयोग मुख्य स्थान के रूप में किया जाता है, जो मेरे लिए व्यक्तिगत रूप से असुविधाजनक है। सबसे दिलचस्प सेवा स्टार्टअप IFTTT.com थी , जो "ट्विटर पर दिखाई देने वाले - एसएमएस के माध्यम से भेजें", "फेसबुक पर भेजे - ट्विटर के माध्यम से भेजें", "बारिश होने जा रही है - एसएमएस द्वारा चेतावनी" आदि के रूप के सार्वभौमिक नियमों को बनाने की अनुमति देता है। हां, इसे कुछ जरूरतों के लिए अनुकूलित किया जा सकता है, लेकिन वह अभी भी एलजे पर फेसबुक से पोस्ट नहीं कर सकता है। सभी क्रॉस-होस्टिंग सेवाओं में एक बड़ी खामी है - वे बहुत सार्वभौमिक और खराब अनुकूलन योग्य हैं, और दुर्लभ लोगों में लोकप्रिय रूसी सामाजिक नेटवर्क शामिल हैं। सूची में वही जानें अत्यंत दुर्लभ हैं। और यदि आप आरएसएस के माध्यम से एलजे में पोस्ट प्राप्त कर सकते हैं, तो आप इसे केवल एपीआई के माध्यम से भेज सकते हैं।

एक कारण और भी है। मैं सामग्री के आधार पर, जहां मैं पोस्ट करता हूं, उसे नियंत्रित करने में सक्षम होना चाहता हूं। उदाहरण के लिए, मैं एलजे में फोटो को स्वचालित रूप से प्रकाशित करने के लिए आवश्यक हो सकता है, और इसके लिए लिंक नहीं। या इसके लिए एक लिंक के बजाय पूरी पोस्ट को ट्विटर पर स्थानांतरित करना, जैसा कि कई सेवाएं करते हैं। ऐसा करने के लिए, मुझे अपनी जरूरतों को पूरा करने के लिए स्क्रिप्ट को सही करने में सक्षम होना चाहिए।

परिणामस्वरूप, लक्ष्य सामाजिक नेटवर्क Twitter, LiveJournal, Facebook और Vkontakte को कवर करना था, फेसबुक को पोस्ट के लिए "लॉन्चिंग पैड" छोड़ दिया। चूंकि LJ खुद Vkontakte और Twitter पर पोस्ट कर सकते हैं, साथ ही साथ Drupal के साथ एकीकरण के लिए RSS को निर्यात पोस्ट, निम्नलिखित योजना तैयार की गई थी:



एपीआई के बारे में


फेसबुक ने, मेरी राय में, सबसे अधिक ठाठ एपीआई है। यह इंटरफ़ेस आपको उस डेटा के साथ कुछ भी करने की अनुमति देता है जिसे आप सोशल नेटवर्क में दर्ज करते हैं - इसे संरचित रूप में प्राप्त करते हैं, बहुत सारे सुविधाजनक तंत्र, FQL, HTTP अनुरोधों के माध्यम से इसे बदलते या हटाते हैं। और इस पृष्ठभूमि के खिलाफ, फेसबुक के साथ काम करने वाले अपेक्षाकृत कम संख्या में तृतीय-पक्ष एप्लिकेशन आश्चर्यचकित थे।

एपीआई का उपयोग करने के अलावा, मैंने फेसबुक के सरलीकृत मोबाइल संस्करण के पृष्ठों को पार्स करने की भी कोशिश की - इससे मुझे एपीआई की तुलना में अधिक जानकारी खींचने में मदद मिली। कुछ मामलों में, यह एक बहुत ही उपयोगी तंत्र है। इस मामले में, मानक सुविधाओं के साथ पूरी तरह से फैलाव करना संभव था।

पर्ल लाइब्रेरी में, सब कुछ ठीक हो गया: सीपीएल पर पर्ल के लिए, कई मॉड्यूल पाए गए जो फेसबुक के साथ काम को लागू करते हैं, लेकिन प्रोटोकॉल की सादगी के कारण, उनके लिए बहुत कम आवश्यकता है। अनुरोध डेटा URL के माध्यम से प्रेषित किया जाता है, परिणाम JSON में वापस आ जाता है। एलजे के लिए, इसमें कई अलग-अलग एपीआई हैं, जिनमें से सबसे सरल एलजे एक्सएमएल-आरपीसी है । मैंने पर्ल के लिए एक तैयार-किए गए मॉड्यूल का उपयोग किया है जो एलजे - एलजे :: सरल के साथ एक काफी स्थिर काम को लागू करता है।

फेसबुक क्रॉस-होस्टिंग सुविधाएँ


फेसबुक को एक एक्सेस टोकन के माध्यम से एक्सेस किया जाता है, सीमित अधिकारों के साथ एक बाहरी एप्लिकेशन द्वारा प्राप्त किया जाता है। सत्र का क्षय समय और प्राप्त access_token को 2 से 25 घंटे तक मापा जाता है। 60 दिनों तक के जीवनकाल के साथ लंबे समय तक टोकन प्राप्त करना संभव है। तार्किक रूप से, आपको हर बार एक क्षय के बाद access_token को अपडेट करने की आवश्यकता है - 5 दिनों के बाद यह होगा या 60 के बाद। उपरोक्त लिपियों में, स्वचालित अपडेट प्रदान नहीं किया जाता है, साथ ही एक अधिसूचना भी है कि एक्सेस टोकन सड़ा हुआ है।

दूसरी विशेषता यह है कि आपके संदेश अन्य उपयोगकर्ताओं के संदेशों के साथ दीवार पर भी उपलब्ध हैं, और यदि आपको नहीं लगता कि केवल आपका ही क्रॉस होना चाहिए, तो अन्य उपयोगकर्ताओं को फेसबुक पर कुछ गलत पोस्ट करने का अवसर मिल सकता है। डिफ़ॉल्ट रूप से, फेसबुक पर, आपके सभी दोस्तों के पास दीवार पर आपके लिए कुछ भी पोस्ट करने का अवसर होता है, विशेष रूप से दोस्तों से किसी और की तस्वीर पर टिप्पणियों का एक गुच्छा प्राप्त करने का अवसर, जिस पर आप "चिह्नित" थे, विशेष रूप से खुश हैं। यदि आप दीवार पर अन्य लोगों के पोस्ट के मॉडरेशन को चालू नहीं करते हैं, तो क्रॉस-शेयरिंग के आगमन के साथ, ये तस्वीरें फेसबुक से परे भी होंगी।

कुछ फेसबुक पोस्ट "अनइनफॉर्मेटिव" हैं - जैसे अनुप्रयोगों द्वारा भेजे गए कुछ संदेश। क्रॉस्पॉस्टर जानता है कि उन्हें कैसे फ़िल्टर करना है और उन्हें लाइवजर्नल में स्थानांतरित नहीं करना है, लेकिन यहां हर कोई खुद के लिए धुन करता है, ज़ाहिर है। कुछ पोस्ट विशेष रूप से एक अलग रूप लेती हैं: उदाहरण के लिए, एक फोटो को फेसबुक लिंक से एक एलजे पोस्ट में एम्बेडेड बड़ी तस्वीर में बदल दिया जाता है।

यह भी आवश्यक है कि LJ पर पोस्ट को पोस्ट करते समय "बैकडेट" ध्वज को सेट करने की आवश्यकता को ध्यान में रखा जाए। स्क्रिप्ट की शुरुआत में इसके लिए एक विशेष स्थिरांक है। ख़ासियत यह है कि यदि आप मार्च 2011 के लिए LiveJournal में एक पोस्ट प्रकाशित करते हैं, तो इसे दोस्तों की धारा में ताज़ा (पुरानी तारीख के साथ) के रूप में रखा जाता है, और जब इसे ट्विटर से जोड़ा जाता है, तो इसे ताज़ा के रूप में प्रकाशित किया जाता है। यदि आप इंटरफ़ेस में एक विशेष जांच डालते हैं, या एपीआई के माध्यम से बैकडेट संपत्ति सेट करते हैं, तो इसे दोस्तों की धारा से बाहर रखा गया है। संग्रह को स्थानांतरित करने के लिए, बैकडेट स्थापित करना आवश्यक है, फिर आप इसे बंद कर सकते हैं।

ठीक है, आपको फेसबुक के साथ कनेक्शन हटाने की आवश्यकता है, अन्यथा आपको एक बंद लूप मिलेगा (स्क्रिप्ट में, बस मामले में, सुरक्षा है)।

क्या हुआ?


यहां मैं शोध की प्रक्रिया में विकसित स्क्रिप्ट प्रकाशित करता हूं, जो अवधारणा का एक प्रकार है। उन्हें एक लेख के हिस्से के रूप में प्रकाशन के लिए भी अनुकूलित किया जाता है - उदाहरण के लिए, डेटाबेस से जुड़ने के लिए सामान्य पैरामीटर को अलग-अलग फाइलों में नहीं रखा जाता है, फ़ंक्शन और फ़ाइलों द्वारा कोड को नहीं तोड़ा जाता है, महत्वहीन लोगों को हटा दिया जाता है, आदि।

क्रॉस-पोस्टर आर्किटेक्चर का तात्पर्य दो-चरणीय कार्य है: डेटाबेस के लिए मध्यवर्ती परिणामों को सहेजना और डेटाबेस से एलजे को रिकॉर्ड निर्यात करना। भविष्य में, इस डेटाबेस का उपयोग एक स्वतंत्र डेटाबेस के रूप में किया जा सकता है, स्थानीय डेटा होने के कारण अन्य सामाजिक नेटवर्क, आरएसएस में निर्यात के लिए स्क्रिप्ट जोड़ना आसान है।

डेटाबेस को बचाने के लिए facebook.pl स्क्रिप्ट का उपयोग किया जाता है। इसका उद्देश्य फेसबुक से दीवार से पृष्ठ प्राप्त करना है और, यदि अगला पृष्ठ है, तो इसके पहचानकर्ता को बाहर दें, यदि नहीं, तो "सभी किया हुआ" दें। पहचानकर्ता एक स्क्रिप्ट पैरामीटर है, इसलिए अगले पेज को लोड करने के लिए आपको इस पहचानकर्ता आदि के साथ स्क्रिप्ट को कॉल करने की आवश्यकता है, जब तक कि हम सभी प्रतिक्रिया में नहीं मिलते।

कृपया ध्यान दें कि काम करने के लिए facebook.pl के लिए, आपको डेटाबेस कनेक्शन मापदंडों को बदलने की आवश्यकता है, एलजे में आपके लॉग की पहचानकर्ता, और access_token भी दर्ज करें। डिबगिंग के लिए, आप फेसबुक ग्राफ एपीआई एक्सप्लोरर में एक अल्पकालिक एक्सेस टोकन बना सकते हैं। 60 दिनों तक पहुंच प्राप्त करने के लिए, आपको एक एप्लिकेशन बनाने की आवश्यकता है, AppId और SecretId प्राप्त करें, फिर दिए गए लिंक का उपयोग करके एक्सेस टोकन बनाएं, इस एप्लिकेशन को ड्रॉप-डाउन सूची से चुनकर। अधिकारों की सूची पर ध्यान दें - कुछ चेकमार्कों की कमी आपकी दीवार पर पदों तक पहुंच को सीमित कर सकती है: उदाहरण के लिए, अन्य उपयोगकर्ताओं या फ़ोटो से कुछ और कुछ बाहरी एप्लिकेशन को दिखाई नहीं दे सकते हैं। यदि आप स्क्रिप्ट में अनावश्यक एक्सेस छोड़ने से डरते नहीं हैं, तो सभी चेकबॉक्स को सामान्य रूप से रखना बेहतर है।

डेटाबेस से LiveJournal पर पोस्ट करने के लिए, update_lj.pl स्क्रिप्ट का उपयोग किया जाता है। यह आलेख इसके डीबगिंग संस्करण का उपयोग करता है - यह facebook.pl द्वारा डेटाबेस से पहले तैयार की गई एक खाली पोस्ट लेता है, इसे LJ को भेजता है, पृष्ठ के पहचानकर्ता को LJ को लौटाता है, भेजे गए पद को चिह्नित करता है। यह एक मध्यवर्ती संस्करण है, और मैं इसे यहां छोड़ रहा हूं, क्योंकि किसी भी समस्या के मामले में, LiveJournal से स्क्रिप्ट द्वारा बनाई गई पोस्ट को हटाने के लिए यह बहुत असुविधाजनक है।

इस घटना में कि LJ को स्वचालित रूप से बनाए गए गलत पदों के एक समूह के साथ फिर से भरा गया है, आप पोस्ट के अंत में lj_change.pl स्क्रिप्ट के साथ चयनात्मक संपादन, हटाने या गुणों को बदल सकते हैं।

परिणामस्वरूप, संग्रह को स्थानांतरित करने के लिए, आपको सभी पृष्ठों को एक bash स्क्रिप्ट के माध्यम से जाना होगा जो facebook.pl की आवश्यक संख्या को कॉल करता है, और उसके बाद updatelj.pl को चलाएं जितनी बार आपने डेटाबेस में रिकॉर्ड किया है। Facebook.pl को नियमित रूप से अपडेट करने के लिए, यह एक घंटे या दिन में एक बार मुकुट को कॉल करने के लिए पर्याप्त है, फिर एक समान बैश स्क्रिप्ट के बाद updatelj.pl पर कॉल करें।

मुझे किसी भी टिप्पणी और परिवर्धन के साथ-साथ उन उत्साही लोगों के लिए खुशी होगी जो इस से बाहर एक बाह्य सार्वभौमिक सेवा करना चाहते हैं या कर सकते हैं।

CREATE TABLE `myposts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ctime` datetime DEFAULT NULL, //   `message` text, //   `link` text, //    `picture_fb` text, //    `posted_to_lj` int(11) DEFAULT NULL, //     ? `lj_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, //     `lj_item_id` int(11) DEFAULT NULL, //    () `lj_anum` int(11) DEFAULT NULL, //   ,  item_id  html_id `lj_html_id` int(11) DEFAULT NULL, //    (, ,   .html) `user` varchar(50) DEFAULT NULL, //  (     ) PRIMARY KEY (`id`) ) 


 #!/bin/bash #   NEXT=`./facebook.pl`; echo $NEXT; while [ "$NEXT" != "all done" ] do NEXT=`$NEXT`; echo $NEXT; done 


Facebook.pl स्रोत कोड दिखाएं
#! / usr / बिन / पर्ल

खुला qw का उपयोग करें : ( std : utf8 ) ;
LWP का उपयोग करें :: सरल ;
उपयोग YAML :: टिनी ;
JSON का उपयोग करें ;
यूआरआई का उपयोग करें ;
डीबीआई का उपयोग करें ;
उपयोग DBD :: MySQL ;

$ DB_LOGIN = "======== DB-USER ==========" ;
$ DB_PASS = "======== DB-PASS ==========" ;
$ DATABASE = "======== DB-NAME ==========" ;
$ USER = '======== आपका-LJ-USER ===========' ;
मेरे $ access_token = '======== आपकी- ACCESS-TOKEN-SEE-GRAPH.FACEBOOK.COM-FOR-THE-Details ==========' ;

# ARGV [0] वह मान है जो facebook अपने अगले पेज URL में "CGI पैरामीटर" के मान के रूप में रखता है
$ तक = $ ARGV [ 0 ] ;

मेरे $ dbh = DBI -> कनेक्ट ( "DBI: mysql: database = mysqTC ; host = localhost" , $ DB_LOGIN , $ DB_PASS ) || "डेटाबेस से कनेक्ट करने में त्रुटि: $ n!"

$ dbh -> do ( "$ DATABASE का उपयोग करें;" ) ;

# अगली चार पंक्तियाँ फेसबुक ग्राफ एपीआई अनुरोध के लिए हैं
my $ uri = new URI ( 'https://graph.facebook.com/me/feed' ) ;
$ uri -> query_form ( { access_token => $ access_token , = = $ तक , base_amount => 1 , value => 1 } ) ;
मेरा $ सम्मान = मिलता है ( "$ उरी" ) ;
$ सम्मान = परिभाषित $ सम्मान ? decode_json ( $ सम्मान ) : अपरिभाषित ;

$ अगला = $ सम्मान -> { पेजिंग } -> { अगला } ;
$ अगला = ~ / auntil = ( . +) $ / ;
$ = $ 1 तक ;

# स्क्रिप्ट के परिणामस्वरूप मैंने अगले पुनरावृत्ति के लिए सभी किए गए संदेश या बैश कमांड को दिखाने का फैसला किया है। यह एक सा कतार लग रहा है ...

अगर ( $ तक ! = "" ) {
प्रिंट "./facebook.pl" जब तक $ "एन" ;
} और
{
प्रिंट "सभी किया" ;
}

# अद्यतन डेटाबेस
मेरी $ पोस्ट के लिए ( @ { $ सम्मान -> { डेटा } } ) {
$ ctime = $ पोस्ट -> { create_time } ;
$ ctime = ~ /(dddd)-(dd)-(dd).(dd):(dd):(dd)/ ;
( $ y , $ m , $ d , $ h , $ i , $ s ) = ( $ 1 , $ 2 , $ 3 , $ 4 , $ 5 , $ 6 ) ;
$ समय = "$ h: $ i: $ s" ;
$ sqltime = $ y $ मी $ d $ ज $ मैं $ एस
$ संदेश = $ पोस्ट -> { संदेश } ;
$ लिंक = $ पोस्ट -> { लिंक } ;
$ चित्र = $ पोस्ट -> { चित्र } ;

$ sql = "myposts से चयन करें * जहाँ उपयोगकर्ता = 'US USER' और ctime = '$ sqltime'" ;
$ sth = $ dbh -> तैयार ( $ sql ) ;
$ sth -> निष्पादित ;

अगर ( $ sth -> पंक्तियों == 0 ) {

$ sql = "myposts सेट उपयोगकर्ता = 'US USER', लिंक =" में डालें $ dbh -> उद्धरण ( $ लिंक ) ", picture_fb =" $ dbh -> उद्धरण ( $ चित्र ) ", संदेश =" $ dbh -> उद्धरण ( $ संदेश ) ", ctime = '$ sqltime'" ;

# ट्विटर जैसी पोस्ट को फिल्टर करने के लिए निम्न लाइन का इरादा है। मैंने उन्हें छोड़ने का फैसला किया है क्योंकि उनमें से अधिकांश मौजूदा फेसबुक या लाइवजर्नल पोस्ट की लिंक हैं।
अगर ( $ संदेश ! ~ / t co // ) {
$ dbh -> do ( $ sql ) ;
}
}
}


अपडेट_एलजे स्रोत कोड दिखाएं
#! / usr / बिन / पर्ल

LJ का उपयोग करें :: सरल ;
उपयोग की तारीख :: मणिप ;
डीबीआई का उपयोग करें ;
उपयोग DBD :: MySQL ;

$ USER = '======== आपका-LJ-USER ===========' ;
$ DB_LOGIN = "======== DB-USER ==========" ;
$ DB_PASS = "======== DB-PASS ==========" ;
$ LJ_NAME = "======== LJ-USER ===========" ;
$ LJ_PASS = "======== LJ-PASS ==========" ;

$ DATABASE = 'facebook' ;
$ DEBUG = 1 ;

# "1" के लिए निम्न स्थिरांक को सेट करना बेहद जरूरी है
# यदि आपने इस स्क्रिप्ट का उपयोग करके सभी पुराने रिकॉर्ड को स्थानांतरित करने का निर्णय लिया है।
$ HIDE_FROM_FRIENDS_WALLS = 0 ;

मेरा $ dbh = DBI -> कनेक्ट (
"DBI: mysql: database = mysql; host = localhost" ,
$ DB_LOGIN ,
$ DB_PASS ,
) || "डेटाबेस से कनेक्ट करने में त्रुटि: $ n!"

मेरा $ lj = नया LJ :: सरल ( {
उपयोगकर्ता => $ LJ_NAME ,
पास => $ LJ_PASS ,
साइट => "livejournal.com:80" ,
} ;
( परिभाषित $ lj )
|| मर "$ 0: LiveJournal में प्रवेश करने में विफल: $ LJ :: सरल :: त्रुटिपूर्ण" ;

$ sql = "ctime का चयन करें, UNIX_TIMESTAMP (cIME), लिंक, संदेश, चित्र_fb, आईडी से myposts जहां उपयोगकर्ता = 'US USER' और lj_html_id cc desc limit 0,1 है; ;
$ dbh -> do ( "$ DATABASE का उपयोग करें;" ) ;

@row_ary = $ dbh -> selectrow_array ( $ sql ) ;
अगर ( $ row_ary [ 0 ] == "" ) { निकास ; }

( $ ctime , $ ctime_ts , $ link , $ message , $ picture_fb , $ id ) = @row_ary ;

$ संदेश = ~ s / n / <br> <br> <br> / जी ; # html के लिए सीआर तैयार करना

अगर ( $ DEBUG ) { $ $ संदेश प्रिंट करें "एन" ; }

# पोस्ट के पाठ से विषय का निर्माण
$ मेसैगेलैट्रिक्स = लंबाई ( $ संदेश ) ;
अगर ( $ मेसैगेलैट्रिक्स > 50 ) {
$ i = सूचकांक ( $ संदेश "" , "" ) ;
करो {
$ j = $ i ;
$ i = सूचकांक ( $ संदेश "" , "" , $ i + 1 ) ;
} जबकि ( $ i < 50 ) ;
$ विषय = ( लंबाई ( $ संदेश ) > 50 ) ? पदार्थ ( $ संदेश , 0 , $ j ) "..." : $ संदेश ;

अगर ( $ DEBUG ) { प्रिंट "पोस्टिंग $ विषय ... n" ; }

मेरी % प्रविष्टि = ( ) ; $ lj -> NewEntry ( % प्रविष्टि ) || मर "$ 0: नई प्रविष्टि बनाने में विफल: $ LJ :: सरल :: गलत" ;

# क्रॉप्डलिंक
$ फसली = ( लंबाई ( $ लिंक ) > 50 ?
( रूट ( $ लिंक , 0 , 50 ) "..." )
:
$ लिंक ) ;
# छोटे चित्र को बड़े के साथ बदलना
अगर ( $ चित्र_फब = ~ / https : // fbcdn / ) {
$ लघुकथा = $ चित्र_फब ;
$ बड़ी राशि = ~ s / _s / _n / g ;
$ प्रविष्टि = "<a href='$link'>" $ फसली "</a> <br>"
$ संदेश
"<br> <img src = '$ bigpicture'>" ;
} {
अगर ( $ लिंक ने "" )
{
$ प्रविष्टि = "<तालिका> <tr> <td> <img src =" "। $ चित्र_fb।" "संरेखित करें = बाएं> </ td> <td> <a href = '" $ लिंक ""> "
$ फसली
"</a> <br> $ संदेश <br Clear=all> </ td> </ tr> </ table>" ;
} और
{
INR
}
}
$ lj -> सेट- एंट्री ( % प्रविष्टि , $ प्रविष्टि ) || मर "$ 0: नई पोस्ट तैयार करने में विफल - $ LJ :: सरल :: गलत" ;
$ lj -> सेटसुबजेक्ट ( % प्रविष्टि , $ विषय ) ;
$ lj -> सेटडेट ( % प्रविष्टि , $ ctime_ts ) ;
अगर ( $ HIDE_FROM_FRIENDS_WALLS ) { $ lj -> सेटप्रोप_बैकडेट ( % प्रविष्टि , 1 ) ; }
my ( $ item_id , $ anum , $ html_id ) = $ lj -> PostEntry ( % प्रविष्टि ) ;
( परिभाषित $ item_id )
|| मर "$ 0: जर्नल प्रविष्टि दर्ज करने में विफल: $ LJ :: सरल :: गलत" ;

अगर ( $ DEBUG ) { प्रिंट "बनाया गया item_id:" $ item_id ", ओम्:" $ ओम् ", html_id:" $ html_id "एन" ; }

$ sql = "अपडेट myposts सेट उपयोगकर्ता = '$ USER', lj_ts = now (), lj_item_id = '$ item_id', lj_anum = '$ anum', l__html_id = '" $ html_id "" जहाँ आईडी = " $ आईडी ;

$ dbh -> do ( $ sql ) ;


स्रोत कोड lj_change.pl दिखाएं
! / usr / बिन / पर्ल

डेटा का उपयोग करें :: डम्पर ;
POSIX का उपयोग करें ;
LJ का उपयोग करें :: सरल ;
उपयोग समय :: स्थानीय ;
डीबीआई का उपयोग करें ;
उपयोग DBD :: MySQL ;

$ LJ_LOGIN = "=========== LJ-LOGIN ============" ;
$ LJ_PASS = "=========== LJ-PASS ============" ;
$ DB_LOGIN = "=========== DB-LOGIN ============" ;
$ DB_PASS = "=========== DB-PASS =============" ;
$ DATABASE = "=========== DATABASE ============" ;
$ ऑपरेशन = "..." ; #setbackdate, purge ...

मेरा $ dbh = DBI - > कनेक्ट (
"DBI: mysql: database = mysql; host = localhost" ,
$ DB_LOGIN,
$ DB_PASS,
) || "डेटाबेस से कनेक्ट करने में त्रुटि: $ n!"

$ dbh - > do ( "$ DATABASE का उपयोग करें ;;" ) ;
$ sql = "myposts से lj_item_id का चयन करें जहाँ cj desc द्वारा lj_html_id NULL आदेश नहीं है;" ;

$ परिणाम = $ dbh - > selectall_hashref ( $ sql, 'lj_item_id' ) ;
मेरी $ id ( कुंजी % $ परिणाम ) {
# $ id2 = $ परिणाम -> {lj_item_id};
पुश @ एड्स, $ आईडी ;
}
मेरा $ lj = नया LJ :: सरल ( {
उपयोगकर्ता => $ LJ_LOGIN,
पास => $ LJ_PASS,
साइट => अपरिभाषित,
छंद => अपराजित,
} ;

( परिभाषित $ lj )
|| मर "$ 0: LiveJournal में प्रवेश करने में विफल: $ LJ :: सरल :: त्रुटिपूर्ण" ;

प्रिंट "लॉग ऑन ... एन" ;

मेरी % प्रविष्टियाँ = ( ) ;

( @ids ) के लिए {
"प्रविष्टि का अनुरोध $ _... n" प्रिंट करें ;

( परिभाषित $ lj - > GetEntries ( % प्रविष्टियाँ, अपराजित, "एक" , $ _ ) ) या "$ 0: प्रिंट करें प्रविष्टियाँ प्राप्त करने में विफल - $ LJ :: सरल :: त्रुटिपूर्ण" ;
मेरी $ आइटम = $ प्रविष्टियाँ { $ _ } ;

अगर ( $ ऑपरेशन == 'सेटबैकडेट' ) {
$ lj - > Setprop_backdate ( $ आइटम, 1 ) या "$ 0 प्रिंट करें : बैक डेट प्रॉपर्टी सेट करने में विफल - $ LJ :: Simple :: misorn" ;
INR
}
अगर ( $ ऑपरेशन == 'शुद्ध' ) {
$ lj - > EditEntry ( $ आइटम, अपरिभाषित ) ;
}
$ sql = "अपडेट मायपोस्ट सेट ..." ;
$ dbh - > do ( $ sql ) ;
}
प्रिंट "do.n" ;
निकास ( 0 ) ;



पुनश्च वैसे, हैबर-एडिटर के माध्यम से हाइलाइटिंग सिंटैक्स बहुत बुरी तरह से काम करता है। पहले स्क्रिप्ट में, हाइलाइट डेटाबेस से जुड़ने वाली लाइन (DBI-> कनेक्ट) तक काम करता है: जैसे ही यह प्रकट होता है, स्रोत टैग पर्ल सिंटैक्स को हाइलाइट करना बंद कर देता है। दूसरे में, यह शायद उस पर भी दुर्घटनाग्रस्त हो जाता है। मुझे फ़ॉन्ट टैग के माध्यम से हाइलाइटिंग करना था।

Source: https://habr.com/ru/post/In149093/


All Articles