ट्विटर एपीआई संस्करण 1.1 के साथ user_timeline प्राप्त करने के लिए सरलतम PHP उदाहरण


292

जून 11 2013 तक ट्विटर एपीआई 1.0 सेवानिवृत्ति के कारण, नीचे दी गई स्क्रिप्ट अब काम नहीं करती है।

// Create curl resource 
$ch = curl_init(); 
// Set url 
curl_setopt($ch, CURLOPT_URL, "http://twitter.com/statuses/user_timeline/myscreenname.json?count=10"); 
// Return the transfer as a string 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
// $output contains the output string 
$output = curl_exec($ch); 
// Close curl resource to free up system resources 
curl_close($ch);

if ($output) 
{
    $tweets = json_decode($output,true);

    foreach ($tweets as $tweet)
    {
        print_r($tweet);
    }
}

मैं कम से कम कोड के साथ user_timeline (हाल की स्थिति) कैसे प्राप्त कर सकता हूं?

मुझे यह मिला: https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline लेकिन मुझे निम्न त्रुटि मिली:

"{"errors":[{"message":"Could not authenticate you","code":32}]}"

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

PHP के साथ हाल की उपयोगकर्ता स्थितियों को प्राप्त करने का सबसे सरल / सबसे छोटा तरीका क्या है?


97
मैं इसके जवाब के लिए KILL करूंगा। उनका प्रलेखन भयानक रूप से खराब है।
RCNeil

मैं ट्विटर एपीआई के लिए नया हूं और इसके साथ थोड़ा संघर्ष कर रहा हूं। मैंने खुद को पदावनत कोड का उपयोग करते हुए पाया।
एंथनी


@ मर्क थैंक्स मार्क !! वह तो आसान था!! यह मेरे लिए शुरू में काम नहीं किया। मैं WAMP चला रहा हूं। मुझे अपनी
App

1
मैंने अभी बिना CURL या किसी अन्य अतिरिक्त पुस्तकालयों के साथ समाधान लिखा है: stackoverflow.com/questions/17049821/…
राउली राजंडे

जवाबों:


820

महत्वपूर्ण नोट: 2018 के मध्य तक, ट्विटर एपीआई टोकन प्राप्त करने की प्रक्रिया बहुत अधिक नौकरशाही बन गई। मुझे एपीआई टोकन का एक सेट प्रदान करने के लिए एक सप्ताह से अधिक समय लगा है , और यह आप लोगों के लिए एक ओपन सोर्स प्रोजेक्ट है और पैकगिस्ट पर 1.2 मिलियन से अधिक इंस्टालेशन और जीथब पर 1.6k सितारे हैं, जो सैद्धांतिक रूप से उच्च प्राथमिकता होनी चाहिए ।

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


तो आप ट्विटर v1.1 एपीआई का उपयोग करना चाहते हैं?

नोट: इनके लिए फाइलें GitHub पर हैं

संस्करण 1.0 जल्द ही पदावनत हो जाएगा और अनधिकृत अनुरोधों की अनुमति नहीं दी जाएगी। तो, यहाँ एक पोस्ट है जो आपकी मदद करने के लिए एक PHP वर्ग के साथ-साथ आपके जीवन को आसान बनाने के लिए करता है।

1. डेवलपर अकाउंट बनाएं: ट्विटर पर खुद को डेवलपर अकाउंट सेट करें

आपको आधिकारिक ट्विटर डेवलपर साइट पर जाने और डेवलपर खाते के लिए पंजीकरण करने की आवश्यकता है। यह v1.1 एपीआई के लिए अनुरोध करने के लिए एक स्वतंत्र और आवश्यक कदम है।

2. एक एप्लिकेशन बनाएं : ट्विटर डेवलपर साइट पर एक एप्लिकेशन बनाएं

क्या? आपने सोचा कि आप बिना मांगे अनुरोध कर सकते हैं? ट्विटर के v1.1 एपीआई के साथ नहीं। आपको http://dev.twitter.com/apps पर जाना होगा और "एप्लिकेशन बनाएँ" बटन पर क्लिक करना होगा।

यहां छवि विवरण दर्ज करें

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

इसलिए, एप्लिकेशन बनाने का उद्देश्य खुद (और ट्विटर) को कुंजी का एक सेट देना है। य़े हैं:

  • उपभोक्ता कुंजी
  • उपभोक्ता रहस्य
  • पहुंच टोकन
  • पहुँच टोकन रहस्य

इन टोकनों के लिए यहाँ पर थोड़ी जानकारी है

3. पहुंच टोकन बनाएं : सफल अनुरोध करने के लिए आपको इनकी आवश्यकता होगी

OAuth कुछ टोकन का अनुरोध करता है। इसलिए आपको उन्हें अपने लिए उत्पन्न करने की आवश्यकता है।

यहां छवि विवरण दर्ज करें

सबसे नीचे "मेरा एक्सेस टोकन बनाएं" पर क्लिक करें। फिर एक बार जब आप फिर से नीचे की ओर स्क्रॉल करते हैं, तो आपके पास कुछ नई जनरेट की हुई कुंजियाँ होंगी। आपको अपने एपीआई कॉल के लिए इस पृष्ठ से चार पहले से लेबल की गई कुंजियों को हथियाने की जरूरत है, इसलिए उन्हें कहीं नोट कर लें।

4. प्रवेश स्तर बदलें : आप केवल-पढ़ने के लिए नहीं चाहते हैं, क्या आप?

यदि आप इस एपीआई का कोई सभ्य उपयोग करना चाहते हैं, तो आपको GET अनुरोधों का उपयोग करके मानक डेटा पुनर्प्राप्ति के अलावा कुछ भी करने पर अपनी सेटिंग्स को पढ़ने और लिखने के लिए बदलना होगा ।

यहां छवि विवरण दर्ज करें

पृष्ठ के शीर्ष के पास "सेटिंग" टैब चुनें।

यहां छवि विवरण दर्ज करें

अपने एप्लिकेशन को पढ़ने / लिखने का उपयोग दें, और नीचे "अपडेट" दबाएं।

आप उन एप्लिकेशन अनुमति मॉडल के बारे में अधिक पढ़ सकते हैं जो ट्विटर यहां उपयोग करता है।


5. एपीआई तक पहुंचने के लिए कोड लिखें : मैंने आपके लिए इसका सबसे अधिक उपयोग किया है

मैंने ऊपर दिए गए कोड को कुछ संशोधनों और परिवर्तनों के साथ, एक PHP वर्ग में संयोजित किया है, इसलिए आपको जिन अनुरोधों की आवश्यकता है, उन्हें बनाना वास्तव में सरल है।

इसमें OAuth और Twitter v1.1 API और मेरे द्वारा बनाई गई क्लास का उपयोग किया गया है, जिसे आप नीचे पा सकते हैं।

require_once('TwitterAPIExchange.php');

/** Set access tokens here - see: https://dev.twitter.com/apps/ **/
$settings = array(
    'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN",
    'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET",
    'consumer_key' => "YOUR_CONSUMER_KEY",
    'consumer_secret' => "YOUR_CONSUMER_SECRET"
);

सुनिश्चित करें कि आपने अपने आवेदन से प्राप्त कुंजियों को उनके संबंधित रिक्त स्थान में रखा है।

अगला आपको एक URL चुनने की आवश्यकता है जिसे आप अनुरोध करना चाहते हैं। ट्विटर उनकी है API दस्तावेज़ आप चुनने में मदद करने जो यूआरएल और भी अनुरोध प्रकार (पोस्ट या जीईटी)।

/** URL for REST request, see: https://dev.twitter.com/docs/api/1.1/ **/
$url = 'https://api.twitter.com/1.1/blocks/create.json';
$requestMethod = 'POST';

दस्तावेज़ीकरण में, प्रत्येक URL बताता है कि आप इसके पास क्या कर सकते हैं। यदि हम ऊपर दिए गए "ब्लॉक" URL का उपयोग कर रहे हैं, तो मैं निम्नलिखित POST पैरामीटर पास कर सकता हूं:

/** POST fields required by the URL above. See relevant docs as above **/
$postfields = array(
    'screen_name' => 'usernameToBlock', 
    'skip_status' => '1'
);

अब जब आप API के साथ क्या करना चाहते हैं, यह सेट हो गया है, तो वास्तविक अनुरोध करने का समय आ गया है।

/** Perform the request and echo the response **/
$twitter = new TwitterAPIExchange($settings);
echo $twitter->buildOauth($url, $requestMethod)
             ->setPostfields($postfields)
             ->performRequest();

और एक पोस्ट अनुरोध के लिए, यह बात है!

एक के लिए प्राप्त अनुरोध, यह थोड़ा अलग है। यहाँ एक उदाहरण है:

/** Note: Set the GET field BEFORE calling buildOauth(); **/
$url = 'https://api.twitter.com/1.1/followers/ids.json';
$getfield = '?username=J7mbo';
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
echo $twitter->setGetfield($getfield)
             ->buildOauth($url, $requestMethod)
             ->performRequest();     

अंतिम कोड उदाहरण : मेरे अनुयायियों की सूची के लिए एक सरल GET अनुरोध के लिए।

$url = 'https://api.twitter.com/1.1/followers/list.json';
$getfield = '?username=J7mbo&skip_status=1';
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
echo $twitter->setGetfield($getfield)
             ->buildOauth($url, $requestMethod)
             ->performRequest();  

मैंने GitHub पर इन फाइलों को @ lackovic10 और @ ड्राइवर्स को क्रेडिट के साथ डाला है! मुझे आशा है कि कोई इसे उपयोगी पाता है; मुझे पता है कि मैंने किया (मैंने इसे लूप में बल्क ब्लॉकिंग के लिए इस्तेमाल किया)।

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


4
@kaffolder उस पृष्ठ का लिंक: profilepicture.co.uk/caching-api-responses-php इसे करने का एक सरल तरीका बताता है। आप पहले अनुरोध पर अपने ट्विटर डेटा को एक फ़ाइल, या डेटाबेस (MySQL या MongoDB) पर लिखते हैं, फिर बाद में आपके द्वारा फ़ाइल के लिए इच्छित समय सीमा के विरुद्ध वर्तमान समय की जाँच करते हैं (आप फ़ाइल को समय सीमा के रूप में नाम दे सकते हैं ), और यदि फ़ाइल मौजूद है और फ़ाइल का नाम आपके इच्छित समय सीमा के भीतर है, तो API अनुरोध करने के बजाय डेटा खींचें। यदि फ़ाइल मौजूद है, लेकिन समय सीमा पार हो गई है, तो फ़ाइल को हटा दें फिर एपीआई अनुरोध करें।
जिम्बो

7
मैं यह पता नहीं लगा सकता कि कैसे एक बार लौटे json डेटा को संभालना है। मैं इसे केवल इको $ ट्विटर -> सेटगेटफील्ड ($ getfield) -> buildOauth ($ url, $ requestMethod) -> PerformRequest () के रूप में स्क्रीन पर प्रतिध्वनित नहीं करना चाहता; APIESIES, मैं यह पता नहीं लगा सकता कि न्यूलाइन्स कैसे करें! मैं $ jsonData = json_decode ($ twitter) जैसा कुछ करना चाहता हूं; लेकिन यह काम नहीं करता है - मुझे ऐसा लगता है कि मुझे कुछ मौलिक याद आ रहा है, लेकिन पैसा नहीं गिर रहा है ...
एशले

67
धन्यवाद, ट्विटर का प्रलेखन एक अव्यवस्थित गड़बड़ है, इससे बहुत मदद मिली।
जरीन

7
इस श्रेणी को विंडोज पर काम करने के लिए काफी कुछ आवश्यक शर्तें हैं। आप की एक काम संस्करण होना आवश्यक है cURL अपने में लोड php.iniफ़ाइल और भी अपने में CA प्रमाणपत्रों को लोड करने के लिए की जरूरत php.iniका उपयोग कर फ़ाइल curl.cainfo = path\to\cacert.pem। आप यहां सीए सेर्ट कर सकते हैं
जेक Z

4
@ जिम्बो मैं सिर्फ यह ध्यान दे रहा था कि कुछ डिफ़ॉल्ट cURL एक्सटेंशन विंडोज में छोटी हैं और प्रतिस्थापन की आवश्यकता होती है (इसलिए "निश्चित" संस्करणों के लिए लिंक) और यह कि सीए सेर्ट्स को लोड किए बिना, आपकी कक्षा कर्ल-फेरर () के रूप में एक गलत रिटर्न देती है। रिपोर्ट करता है कि 'एसएसएल प्रमाणपत्र समस्या, सत्यापित करें कि सीए प्रमाणपत्र ठीक है'। CURLOPT_SSL_VERIFYPEER को बंद करके इससे बचा जा सकता है, लेकिन मुझे लगा कि मैं वास्तव में CA सीट्स का उपयोग करने के लिए बुनियादी निर्देश शामिल करूंगा। बस कुछ लोगों को खोज के कुछ मिनटों में बचाने के लिए इसे शामिल किया गया।
जेक जेड

137

Dev.twitter.com पर जाएं और एक एप्लिकेशन बनाएं । यह आपको आपकी जरूरत के हिसाब से साख प्रदान करेगा। यहाँ एक कार्यान्वयन है जिसे मैंने हाल ही में PHP और cURL के साथ लिखा है ।

<?php
    function buildBaseString($baseURI, $method, $params) {
        $r = array();
        ksort($params);
        foreach($params as $key=>$value){
            $r[] = "$key=" . rawurlencode($value);
        }
        return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
    }

    function buildAuthorizationHeader($oauth) {
        $r = 'Authorization: OAuth ';
        $values = array();
        foreach($oauth as $key=>$value)
            $values[] = "$key=\"" . rawurlencode($value) . "\"";
        $r .= implode(', ', $values);
        return $r;
    }

    $url = "https://api.twitter.com/1.1/statuses/user_timeline.json";

    $oauth_access_token = "YOURVALUE";
    $oauth_access_token_secret = "YOURVALUE";
    $consumer_key = "YOURVALUE";
    $consumer_secret = "YOURVALUE";

    $oauth = array( 'oauth_consumer_key' => $consumer_key,
                    'oauth_nonce' => time(),
                    'oauth_signature_method' => 'HMAC-SHA1',
                    'oauth_token' => $oauth_access_token,
                    'oauth_timestamp' => time(),
                    'oauth_version' => '1.0');

    $base_info = buildBaseString($url, 'GET', $oauth);
    $composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
    $oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
    $oauth['oauth_signature'] = $oauth_signature;

    // Make requests
    $header = array(buildAuthorizationHeader($oauth), 'Expect:');
    $options = array( CURLOPT_HTTPHEADER => $header,
                      //CURLOPT_POSTFIELDS => $postfields,
                      CURLOPT_HEADER => false,
                      CURLOPT_URL => $url,
                      CURLOPT_RETURNTRANSFER => true,
                      CURLOPT_SSL_VERIFYPEER => false);

    $feed = curl_init();
    curl_setopt_array($feed, $options);
    $json = curl_exec($feed);
    curl_close($feed);

    $twitter_data = json_decode($json);

//print it out
print_r ($twitter_data);

?>

इसे कमांड लाइन से चलाया जा सकता है:

$ php <name of PHP script>.php

2
कोड स्निपेट के लिए धन्यवाद, निर्दोष रूप से काम करते हैं। केवल समस्या यह है कि मुझे यह पता नहीं लग सकता है कि पोस्ट काउंट रिटर्न कैसे सेट किया जाए। यह केवल 20 की वापसी करता है और मैं पूरी राशि चाहता हूं जो कि ट्विटर की सीमा के अनुसार 200 है।
फ्लेटिन

23
आप इस दृष्टिकोण के साथ screen_nameऔर कैसे सेट करेंगे count? मैंने इसे $urlचर में जोड़ने की कोशिश की लेकिन मुझे "आपको प्रमाणित नहीं कर सका" त्रुटि मिली।
जेवियर विलानुएवा

1
यह कोड महान काम करता है! मैं खोज / tweets.json एपीआई का उपयोग करने के लिए इसे संशोधित करने की कोशिश कर रहा हूं, लेकिन मुझे हमेशा प्रतिक्रिया मिल रही है 'आपको प्रमाणित नहीं कर सका' - कोई विचार?
क्रिस

1
यह पोस्ट बहुत मददगार रही है। मेरा कोड curl_init()हालांकि से वापस नहीं आ रहा है । मैंने कुछ उदाहरणों को देखा है और वे बहुत सरल और सीधे और बिल्कुल इस कोड की तरह लगते हैं ... क्या मुझे कुछ विशेष स्थापित करने की आवश्यकता है?
जेसिकरयगुन

1
इसने मेरे लिए 26 अक्टूबर 2016 को काम किया। आउटपुट मेरी उम्मीद से थोड़ा अधिक जटिल था।
जॉन्स

61

नदियों द्वारा चिपकाया गया कोड बहुत अच्छा है। आपका बहुत बहुत धन्यवाद! मैं यहां नया हूं और कोई टिप्पणी नहीं कर सकता, मैं सिर्फ javiervd से सवाल का जवाब देना चाहता हूं (आप स्क्रीन_नाम कैसे सेट करेंगे और इस दृष्टिकोण के साथ गणना करेंगे?), क्योंकि मुझे यह पता लगाने के लिए बहुत समय खो दिया है। बाहर।

आपको URL और हस्ताक्षर बनाने की प्रक्रिया के लिए दोनों मापदंडों को जोड़ना होगा । हस्ताक्षर बनाना वह लेख है जिसने मेरी मदद की। यहाँ मेरा कोड है:

$oauth = array(
           'screen_name' => 'DwightHoward',
           'count' => 2,
           'oauth_consumer_key' => $consumer_key,
           'oauth_nonce' => time(),
           'oauth_signature_method' => 'HMAC-SHA1',
           'oauth_token' => $oauth_access_token,
           'oauth_timestamp' => time(),
           'oauth_version' => '1.0'
         );

$options = array(
             CURLOPT_HTTPHEADER => $header,
             //CURLOPT_POSTFIELDS => $postfields,
             CURLOPT_HEADER => false,
             CURLOPT_URL => $url . '?screen_name=DwightHoward&count=2',
             CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false
           );

2
मैं इसे पर्याप्त वोट नहीं दे सकता। ट्विटर के एपीआई डॉक्यूमेंटेशन में, यह आपको चेहरे पर घूरता है, लेकिन यह कभी भी सुपर 'स्पष्ट' नहीं है। क्या यह दृष्टिकोण buildAuthorizationHeaderसमारोह के साथ खिलवाड़ करता है? मैंने इसे अलग से लागू किया।
मो 12

मैंने लंबे समय तक इसके साथ काम नहीं किया है, इसलिए मुझे याद नहीं है, अगर आपने अभी तक अपने मुद्दे को हल नहीं किया है, तो मैं अगले दिनों में इस पर गौर कर सकता हूं।
अभाव 10

मैं अपने समाधान को अनुकूलित करने की कोशिश कर रहा हूं कि आप स्टेटस / अपडेट पर POST कर सकते हैं। भाग्य के बिना, क्या आपको पता है कि यह कैसे हासिल किया जा सकता है?
पेरोहुहंटर

1
@perrohunter मुझे नहीं पता कि इस पर अधिक ध्यान देना होगा। अगर आपको एक दो दिनों में रास्ता नहीं मिलता है तो मुझे एक संदेश भेजें मैं आपकी मदद करने की कोशिश करूंगा।
२३:३३

18

अन्य उत्तरों में कहा गया है, टोकन, कुंजी और गुप्त पाने के लिए एक ट्विटर ऐप बनाएं। कोड bellow का उपयोग करके, आप अनुरोध पैरामीटर को एक स्थान से संशोधित कर सकते हैं और टाइपो और समान त्रुटियों ( फ़ंक्शन $requestमें परिवर्तन सरणी returnTweet()) से बच सकते हैं ।

function buildBaseString($baseURI, $method, $params) {
    $r = array();
    ksort($params);
    foreach($params as $key=>$value){
        $r[] = "$key=" . rawurlencode($value);
    }
    return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
}

function buildAuthorizationHeader($oauth) {
    $r = 'Authorization: OAuth ';
    $values = array();
    foreach($oauth as $key=>$value)
        $values[] = "$key=\"" . rawurlencode($value) . "\"";
    $r .= implode(', ', $values);
    return $r;
}

function returnTweet(){
    $oauth_access_token         = "x";
    $oauth_access_token_secret  = "x";
    $consumer_key               = "x";
    $consumer_secret            = "x";

    $twitter_timeline           = "user_timeline";  //  mentions_timeline / user_timeline / home_timeline / retweets_of_me

    //  create request
        $request = array(
            'screen_name'       => 'budidino',
            'count'             => '3'
        );

    $oauth = array(
        'oauth_consumer_key'        => $consumer_key,
        'oauth_nonce'               => time(),
        'oauth_signature_method'    => 'HMAC-SHA1',
        'oauth_token'               => $oauth_access_token,
        'oauth_timestamp'           => time(),
        'oauth_version'             => '1.0'
    );

    //  merge request and oauth to one array
        $oauth = array_merge($oauth, $request);

    //  do some magic
        $base_info              = buildBaseString("https://api.twitter.com/1.1/statuses/$twitter_timeline.json", 'GET', $oauth);
        $composite_key          = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
        $oauth_signature            = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
        $oauth['oauth_signature']   = $oauth_signature;

    //  make request
        $header = array(buildAuthorizationHeader($oauth), 'Expect:');
        $options = array( CURLOPT_HTTPHEADER => $header,
                          CURLOPT_HEADER => false,
                          CURLOPT_URL => "https://api.twitter.com/1.1/statuses/$twitter_timeline.json?". http_build_query($request),
                          CURLOPT_RETURNTRANSFER => true,
                          CURLOPT_SSL_VERIFYPEER => false);

        $feed = curl_init();
        curl_setopt_array($feed, $options);
        $json = curl_exec($feed);
        curl_close($feed);

    return json_decode($json, true);
}

और फिर कॉल करें returnTweet()


1
बहुत बढ़िया काम @budidino! पर आवेदन बनाया dev.twitter.com/apps और oauth_access_token, oauth_access_token_secret, consumer_key, consumer_secret के साथ अपने एक्स के भर दिया। * नोट * कि आपको "मेरी एक्सेस टोकन बनाएं" को दबाने की आवश्यकता है और इसे उत्पन्न होने में कुछ सेकंड लगते हैं इसलिए कृपया इसका इंतजार करें।
थियो

@budidino dnt हमें किसी भी पुस्तकालय को शामिल करने की आवश्यकता है ??
आम

मैंने कुंजियों को भर functions.phpदिया, इसे वर्डप्रेस में मेरी फाइल में जोड़ दिया <?php echo returnTweet(); ?>, एक एचटीएमएल फाइल में डाल दिया , और यह "एरे" शब्द को आउटपुट करता है और कुछ नहीं।
J82

@Desi, परिणाम ट्वीट्स की सरणी है, आपको संभालना चाहिए कि आप उनमें से प्रत्येक को कैसे प्रदर्शित करते हैं। सिर्फ अंदर क्या है यह देखने के लिए print_r (returnTweet ()) आज़माएं। सभी ट्वीट्स प्रदर्शित करने के इस उदाहरण को देखें: gist.github.com/budidino/9681764#file-stackoverflow-returntweet
budidino

1
यदि आप केवल नवीनतम ट्वीट प्राप्त करना चाहते हैं, तो आपको $ अनुरोध सरणी को संशोधित करना चाहिए और 1. पर सेट करना चाहिए। मान लीजिए कि आप $ ट्वीट = रिटर्नटाइट () का उपयोग करते हैं; तब यदि आप नवीनतम ट्वीट (केवल इस मामले में) प्रदर्शित करना चाहते हैं, तो आप कुछ इस तरह से लिख सकते हैं: "ट्वीट ट्वीट:" $ ट्वीट [0] ["पाठ"]; यदि आप ट्वीट के पाठ (उदाहरण $ userProfileImageURL = $ ट्वीट [0] ["उपयोगकर्ता"] ["" ​​profile_image_url]] से अधिक से अधिक खींचना चाहते हैं, तो ट्विटर की लौटी संरचना की जांच करना सुनिश्चित करें। dev.twitter.com/docs/api/1.1/get/statuses/user_timeline
budidino

16

धन्यवाद क्रिश!

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

मेरे लिए समस्या, एम्परसेंड एन्कोडिंग में थी। तो आपके कोड में जहां यह निम्न पंक्ति है

$url .= "?".http_build_query($query);

मैंने निम्नलिखित पंक्ति को नीचे जोड़ा:

$url=str_replace("&amp;","&",$url);

और इसने screen_name और count जैसे दो या अधिक मापदंडों का उपयोग करके काम किया।

पूरा कोड इस तरह दिखता है:

$token = 'YOUR TOKEN';
$token_secret = 'TOKEN SECRET';
$consumer_key = 'YOUR KEY';
$consumer_secret = 'KEY SECRET';

$host = 'api.twitter.com';
$method = 'GET';
$path = '/1.1/statuses/user_timeline.json'; // api call path

$query = array( // query parameters
    'screen_name' => 'twitterapi',
    'count' => '2'
);

$oauth = array(
    'oauth_consumer_key' => $consumer_key,
    'oauth_token' => $token,
    'oauth_nonce' => (string)mt_rand(), // a stronger nonce is recommended
    'oauth_timestamp' => time(),
    'oauth_signature_method' => 'HMAC-SHA1',
    'oauth_version' => '1.0'
);

$oauth = array_map("rawurlencode", $oauth); // must be encoded before sorting
$query = array_map("rawurlencode", $query);

$arr = array_merge($oauth, $query); // combine the values THEN sort

asort($arr); // secondary sort (value)
ksort($arr); // primary sort (key)

// http_build_query automatically encodes, but our parameters
// are already encoded, and must be by this point, so we undo
// the encoding step
$querystring = urldecode(http_build_query($arr, '', '&'));

$url = "https://$host$path";

// mash everything together for the text to hash
$base_string = $method."&".rawurlencode($url)."&".rawurlencode($querystring);

// same with the key
$key = rawurlencode($consumer_secret)."&".rawurlencode($token_secret);

// generate the hash
$signature = rawurlencode(base64_encode(hash_hmac('sha1', $base_string, $key, true)));

// this time we're using a normal GET query, and we're only encoding the query params
// (without the oauth params)
$url .= "?".http_build_query($query);
$url=str_replace("&amp;","&",$url); //Patch by @Frewuill

$oauth['oauth_signature'] = $signature; // don't want to abandon all that work!
ksort($oauth); // probably not necessary, but twitter's demo does it

// also not necessary, but twitter's demo does this too
function add_quotes($str) { return '"'.$str.'"'; }
$oauth = array_map("add_quotes", $oauth);

// this is the full value of the Authorization line
$auth = "OAuth " . urldecode(http_build_query($oauth, '', ', '));

// if you're doing post, you need to skip the GET building above
// and instead supply query parameters to CURLOPT_POSTFIELDS
$options = array( CURLOPT_HTTPHEADER => array("Authorization: $auth"),
                  //CURLOPT_POSTFIELDS => $postfields,
                  CURLOPT_HEADER => false,
                  CURLOPT_URL => $url,
                  CURLOPT_RETURNTRANSFER => true,
                  CURLOPT_SSL_VERIFYPEER => false);

// do our business
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);

$twitter_data = json_decode($json);

आशा है कि यह मेरी समस्या के साथ किसी की मदद करता है।


बहुत बहुत धन्यवाद, आपका कोड सुधार अच्छी तरह से काम करता है! एक सवाल फिर से: "// एक मजबूत nonce की सिफारिश की है"। ऐसा क्या हो सकता है? समय()?
सेबेस्टियन

यह बात बताने के लिए धन्यवाद। सेबेस्टियन: एक नॉन एकल-उपयोग वाला टोकन है जिसे क्रिप्टोग्राफिक रूप से सुरक्षित होना चाहिए। mt_rand () दोनों बहुत छोटा है (32 बिट्स) और क्रिप्टोग्राफ़िक PRNG नहीं है। सिद्धांत रूप में, यह ओउथ टोकन को कमजोर बनाता है, लेकिन अपने मूल उदाहरण कोड में सादगी के लिए, मैं कुछ ऐसा उपयोग करना चाहता था जो PHP में आसानी से उपलब्ध हो और आसानी से समझ में आए।
क्रिस रीव्स

त्रुटि प्राप्त करना 32. आपको प्रमाणित नहीं कर सका .. कृपया कोई मदद करें ??? मैंने आपके उपरोक्त कोड का उपयोग किया है
saadk

@frewuill, आप महान भाई हैं, मुझे एक आकर्षण की तरह काम कर रहा है, धन्यवाद।
विजय

9

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

यहाँ सभी महत्वपूर्ण बिट्स एक ही स्थान पर हैं:

  • जैसा कि ऊपर बताया गया है, आप अपने 1.1 एपीआई अनुरोधों पर हस्ताक्षर अवश्य करें। यदि आप सार्वजनिक स्थिति प्राप्त करने जैसा कुछ कर रहे हैं, तो आप उपयोगकर्ता कुंजी के बजाय एक आवेदन कुंजी चाहते हैं। आपके इच्छित पृष्ठ का पूर्ण लिंक है: https://dev.twitter.com/apps
  • आपके पास सभी पैरामीटर्स होने चाहिए, दोनों ऑउथ वाले और एक साथ पैरामीटर (या POST पैरामीटर) प्राप्त करें।
  • यूएचएल एन्कोडेड फॉर्म जो हैशेड हो जाता है, उन्हें कम करने से पहले आपको मापदंडों को टाइप करना होगा।
  • आपको कई बार कुछ चीजों को एनकोड करना होगा - उदाहरण के लिए, आप मापदंडों के url-encoded मानों से एक क्वेरी स्ट्रिंग बनाते हैं, और फिर आप THAT को एन्कोड करते हैं और विधि प्रकार और url के साथ संक्षिप्त करते हैं।

मैं सभी सिरदर्द से सहानुभूति रखता हूं, इसलिए यहां कुछ कोड इसे लपेटने के लिए है:

$token = 'YOUR TOKEN';
$token_secret = 'TOKEN SECRET';
$consumer_key = 'YOUR KEY';
$consumer_secret = 'KEY SECRET';

$host = 'api.twitter.com';
$method = 'GET';
$path = '/1.1/statuses/user_timeline.json'; // api call path

$query = array( // query parameters
    'screen_name' => 'twitterapi',
    'count' => '2'
);

$oauth = array(
    'oauth_consumer_key' => $consumer_key,
    'oauth_token' => $token,
    'oauth_nonce' => (string)mt_rand(), // a stronger nonce is recommended
    'oauth_timestamp' => time(),
    'oauth_signature_method' => 'HMAC-SHA1',
    'oauth_version' => '1.0'
);

$oauth = array_map("rawurlencode", $oauth); // must be encoded before sorting
$query = array_map("rawurlencode", $query);

$arr = array_merge($oauth, $query); // combine the values THEN sort

asort($arr); // secondary sort (value)
ksort($arr); // primary sort (key)

// http_build_query automatically encodes, but our parameters
// are already encoded, and must be by this point, so we undo
// the encoding step
$querystring = urldecode(http_build_query($arr, '', '&'));

$url = "https://$host$path";

// mash everything together for the text to hash
$base_string = $method."&".rawurlencode($url)."&".rawurlencode($querystring);

// same with the key
$key = rawurlencode($consumer_secret)."&".rawurlencode($token_secret);

// generate the hash
$signature = rawurlencode(base64_encode(hash_hmac('sha1', $base_string, $key, true)));

// this time we're using a normal GET query, and we're only encoding the query params
// (without the oauth params)
$url .= "?".http_build_query($query);

$oauth['oauth_signature'] = $signature; // don't want to abandon all that work!
ksort($oauth); // probably not necessary, but twitter's demo does it

// also not necessary, but twitter's demo does this too
function add_quotes($str) { return '"'.$str.'"'; }
$oauth = array_map("add_quotes", $oauth);

// this is the full value of the Authorization line
$auth = "OAuth " . urldecode(http_build_query($oauth, '', ', '));

// if you're doing post, you need to skip the GET building above
// and instead supply query parameters to CURLOPT_POSTFIELDS
$options = array( CURLOPT_HTTPHEADER => array("Authorization: $auth"),
                  //CURLOPT_POSTFIELDS => $postfields,
                  CURLOPT_HEADER => false,
                  CURLOPT_URL => $url,
                  CURLOPT_RETURNTRANSFER => true,
                  CURLOPT_SSL_VERIFYPEER => false);

// do our business
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);

$twitter_data = json_decode($json);

6

यदि आपके पास OAuth PHP लाइब्रेरी स्थापित है, तो आपको स्वयं अनुरोध करने के बारे में चिंता करने की आवश्यकता नहीं है।

$oauth = new OAuth($consumer_key, $consumer_secret, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI);
$oauth->setToken($access_token, $access_secret);

$oauth->fetch("https://api.twitter.com/1.1/statuses/user_timeline.json");
$twitter_data = json_decode($oauth->getLastResponse());

print_r($twitter_data);

अधिक जानकारी के लिए, डॉक्स या उनके उदाहरण देखें । आप pecl install oauthपुस्तकालय प्राप्त करने के लिए उपयोग कर सकते हैं ।


5

सबसे पहले मैं jimbo और ( उनकी पोस्ट / twitter-api-php सिंपल लाइब्रेरी) को धन्यवाद देना चाहता था ।

यदि आप "Twitter-api-php" PHP लाइब्रेरी (TwitterAPIExchange.php) के साथ GET खोज / ट्वीट एपीआई का उपयोग करने जा रहे हैं :

सबसे पहले, आपको बस "एक POST अनुरोध निष्पादित करें और प्रतिक्रिया प्रतिसाद दें" कोड क्षेत्र पर टिप्पणी करनी होगी।

बस "GET अनुरोध करें और प्रतिक्रिया प्रतिध्वनित करें" कोड का उपयोग करें और प्रतिक्रिया को प्रतिध्वनित करें और इन दो पंक्तियों को बदलें:

$url = 'https://api.twitter.com/1.1/followers/ids.json';
$getfield = '?screen_name=J7mbo';

सेवा

$url = 'https://api.twitter.com/1.1/search/tweets.json';
$getfield = '?q=J7mbo';

(बदलें screen_nameकरने के लिए q, बस इतना ही :)


मेरे पास अभी भी भाग्य नहीं है: /
रिकार्डो

2

आपको ट्विटर पर एक "ऐप" बनाने की आवश्यकता होगी (और ऐसा करने के लिए आपको ट्विटर अकाउंट की आवश्यकता होगी)।

फिर, आपको ट्विटर पर अधिकृत अनुरोध करने के लिए OAuth का उपयोग करने की आवश्यकता है ।

हाल के ट्वीट्स की सूची प्राप्त करने के लिए आप GET स्टेटस / user_timeline संसाधन का उपयोग कर सकते हैं ।


4
कृपया, हमें बेवकूफ लोगों के लिए, समझाएं। यदि आप प्रलेखन से कम हो, तो अधिक जानकारी दें। क्या आप HttpRequest()चरण 2 के लिए PHP के फ़ंक्शन का उपयोग करते हैं ? अब्राहम के ट्विटरऑउथ PHP - github.com/abraham/twitteroauth - पुस्तकालय है जो ऐसा करने के लिए माना जाता है, लेकिन इसे कैसे लागू किया जाए इसका एक उदाहरण वास्तव में प्रदान नहीं किया गया है।
RCNeil


2
@MatthewRapati पेज गायब है।
आरएन कुशवाहा

0

यहाँ अपने समय से ट्वीट की एक निर्दिष्ट संख्या प्राप्त करने के लिए एक संक्षिप्त है। यह मूल रूप से अन्य उदाहरणों के समान काम करता है, केवल कम कोड के साथ।

बस कुंजियों को भरें और $countअपनी पसंद के अनुसार समायोजित करें:

$url = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
$count = '10';

$oauth = array('count' => $count,
               'oauth_consumer_key' => '[CONSUMER KEY]',
               'oauth_nonce' => md5(mt_rand()),
               'oauth_signature_method' => 'HMAC-SHA1',
               'oauth_timestamp' => time(),
               'oauth_token' => '[ACCESS TOKEN]',
               'oauth_version' => '1.0');

$oauth['oauth_signature'] = base64_encode(hash_hmac('sha1', 'GET&' . rawurlencode($url) . '&' . rawurlencode(implode('&', array_map(function ($v, $k) { return $k . '=' . $v; }, $oauth, array_keys($oauth)))), '[CONSUMER SECRET]&[ACCESS TOKEN SECRET]', true));

$twitterData = json_decode(file_get_contents($url . '?count=' . $count, false, stream_context_create(array('http' => array('method' => 'GET',
                                                                                                                           'header' => 'Authorization: OAuth ' 
                                                                                                                                       . implode(', ', array_map(function ($v, $k) { return $k . '="' . rawurlencode($v) . '"'; }, $oauth, array_keys($oauth))))))));

यह एक अनाम कार्यों का उपयोग करता है और file_get_contentsइसके बजाय cURL लाइब्रेरी का उपयोग करता है । एक एमडी 5 हैशेड नॉन के उपयोग पर ध्यान दें। हर कोई time()गैर के साथ जा रहा है , हालांकि, OAuth के विषय में वेब पर अधिकांश उदाहरण किसी प्रकार के एन्क्रिप्टेड स्ट्रिंग (जैसे यह एक: http://www.sitepoint.com/understanding-oauth-1/ ) का उपयोग करते हैं। इससे मुझे और भी समझ में आता है।

आगे ध्यान दें: आपको अनाम कार्यों के लिए PHP 5.3+ की आवश्यकता है (यदि आपका सर्वर / कंप्यूटर कुछ शीत युद्ध की गुफा में है और आप इसे अपग्रेड नहीं कर सकते हैं)।


-1

उनके हस्ताक्षर जनरेटर से , आप curlप्रपत्र के आदेश उत्पन्न कर सकते हैं :

curl --get 'https://api.twitter.com/1.1/statuses/user_timeline.json' --data 'count=2&screen_name=twitterapi' --header 'Authorization: OAuth oauth_consumer_key="YOUR_KEY", oauth_nonce="YOUR_NONCE", oauth_signature="YOUR-SIG", oauth_signature_method="HMAC-SHA1", oauth_timestamp="TIMESTAMP", oauth_token="YOUR-TOKEN", oauth_version="1.0"' --verbose

-2
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET);

$timelines = $connection->get('statuses/user_timeline', array('screen_name' => 'NSE_NIFTY', 'count' => 100, 'include_rts' => 1));

3
कृपया इस कोड के बारे में एक स्पष्टीकरण शामिल करें, ताकि ओपी इससे सीख सके।
सेरेब्रस

-2

इस धागे के लिए धन्यवाद, और विशेष रूप से दोस्तो क्योंकि उसका कोड है जो मेरे लिए इसे घर ले गया। बस योगदान देना चाहता था कि एक अनुरोध से JSON डेटा कैसे पुनः प्राप्त करें। विभिन्न अनुरोधों को करने के लिए "// create request" अनुरोध कोड का हिस्सा बदलें। अंततः, यह JSON को ब्राउज़र स्क्रीन पर आउटपुट करेगा

<?php
    function buildBaseString($baseURI, $method, $params) {
    $r = array();
    ksort($params);
    foreach($params as $key=>$value){
        $r[] = "$key=" . rawurlencode($value);
    }
    return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
}

function buildAuthorizationHeader($oauth) {
    $r = 'Authorization: OAuth ';
    $values = array();
    foreach($oauth as $key=>$value)
        $values[] = "$key=\"" . rawurlencode($value) . "\"";
    $r .= implode(', ', $values);
    return $r;
}

function returnTweet(){
    $oauth_access_token         = "2602299919-lP6mgkqAMVwvHM1L0Cplw8idxJzvuZoQRzyMkOx";
    $oauth_access_token_secret  = "wGWny2kz67hGdnLe3Uuy63YZs4nIGs8wQtCU7KnOT5brS";
    $consumer_key               = "zAzJRrPOj5BvOsK5QhscKogVQ";
    $consumer_secret            = "Uag0ujVJomqPbfdoR2UAWbRYhjzgoU9jeo7qfZHCxR6a6ozcu1";

    $twitter_timeline           = "user_timeline";  //  mentions_timeline / user_timeline / home_timeline / retweets_of_me

    //  create request
        $request = array(
            'screen_name'       => 'burownrice',
            'count'             => '3'
        );

    $oauth = array(
        'oauth_consumer_key'        => $consumer_key,
        'oauth_nonce'               => time(),
        'oauth_signature_method'    => 'HMAC-SHA1',
        'oauth_token'               => $oauth_access_token,
        'oauth_timestamp'           => time(),
        'oauth_version'             => '1.0'
    );

    //  merge request and oauth to one array
        $oauth = array_merge($oauth, $request);

    //  do some magic
        $base_info              = buildBaseString("https://api.twitter.com/1.1/statuses/$twitter_timeline.json", 'GET', $oauth);
        $composite_key          = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
        $oauth_signature            = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
        $oauth['oauth_signature']   = $oauth_signature;

    //  make request
        $header = array(buildAuthorizationHeader($oauth), 'Expect:');
        $options = array( CURLOPT_HTTPHEADER => $header,
                          CURLOPT_HEADER => false,
                          CURLOPT_URL => "https://api.twitter.com/1.1/statuses/$twitter_timeline.json?". http_build_query($request),
                          CURLOPT_RETURNTRANSFER => true,
                          CURLOPT_SSL_VERIFYPEER => false);

        $feed = curl_init();
        curl_setopt_array($feed, $options);
        $json = curl_exec($feed);
        curl_close($feed);

    return $json;
}

$tweet = returnTweet();
echo $tweet;

?>

-2

यदि यह किसी के लिए उपयोगी है ... मेरे ब्लॉग में मैंने पिछले ट्वीट को पुनः प्राप्त करने के लिए निम्नलिखित PHP कोड को लागू किया है, उनके सबसे प्रासंगिक डेटा को निकालें और फिर उन्हें MySQL डेटाबेस में सहेजा। यह काम करता है क्योंकि मुझे यह मेरे ब्लॉग में मिला है।

"ट्वीट" तालिका जहां उन्हें स्टोर करती है:

CREATE TABLE IF NOT EXISTS `tweets` (
  `tweet_id` int(11) NOT NULL auto_increment,
  `id_tweet` bigint(20) NOT NULL,
  `text_tweet` char(144) NOT NULL,
  `datetime_tweet` datetime NOT NULL,
  `dayofweek_tweet` char(3) NOT NULL,
  `GMT_tweet` char(5) NOT NULL,
  `shorturl_tweet` char(23) NOT NULL,
  PRIMARY KEY  (`tweet_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=83 ;

get_tweets.php:

<?php
function buildBaseString($baseURI, $method, $params) {
    $r= array();
    ksort($params);
    foreach($params as $key=>$value){
        $r[]= "$key=".rawurlencode($value);
    }
    return $method."&".rawurlencode($baseURI).'&'.rawurlencode(implode('&', $r));
}

function buildAuthorizationHeader($oauth) {
    $r= 'Authorization: OAuth ';
    $values= array();
    foreach($oauth as $key=>$value) {
        $values[]= "$key=\"".rawurlencode($value)."\"";
    }
    $r.= implode(', ', $values);
    return $r;
}

function returnTweets($last_id) {
    $oauth_access_token         = "2687912757-vbyfJA483SEyj2HJ2K346aVMxtOIgVbsY4Edrsw";
    $oauth_access_token_secret  = "nIruzmR0bXqC3has4fTf8KAq4pgOceiuKqjklhroENU4W";
    $api_key                    = "ieDSTFH8QHHPafg7H0whQB9GaY";
    $api_secret                 = "mgm8wVS9YP93IJmTQtsmR8ZJADDNdlTca5kCizMkC7O7gFDS1j";
    $twitter_timeline           = "user_timeline";  //[mentions_timeline/user_timeline/home_timeline/retweets_of_me]
    //create request
    $request= array(
        'screen_name'       => 'runs_ES',
        'count'             => '3',
        'exclude_replies'   => 'true'
        );
    if (!is_null($last_id)) { //Add to the request if it exits a last_id
        $request['since_id']= $max_id;
    }
    $oauth = array(
        'oauth_consumer_key'        => $api_key,
        'oauth_nonce'               => time(),
        'oauth_signature_method'    => 'HMAC-SHA1',
        'oauth_token'               => $oauth_access_token,
        'oauth_timestamp'           => time(),
        'oauth_version'             => '1.0'
        );
    //merge request and oauth to one array
    $oauth= array_merge($oauth, $request);
    //do some magic
    $base_info=                 buildBaseString("https://api.twitter.com/1.1/statuses/$twitter_timeline.json", 'GET', $oauth);
    $composite_key=             rawurlencode($api_secret).'&'.rawurlencode($oauth_access_token_secret);
    $oauth_signature=           base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
    $oauth['oauth_signature']=  $oauth_signature;
    //make request
    $header= array(buildAuthorizationHeader($oauth), 'Expect:');
    $options= array(CURLOPT_HTTPHEADER => $header,
                    CURLOPT_HEADER => false,
                    CURLOPT_URL => "https://api.twitter.com/1.1/statuses/$twitter_timeline.json?". http_build_query($request),
                    CURLOPT_RETURNTRANSFER => true,
                    CURLOPT_SSL_VERIFYPEER => false);
    $feed= curl_init();
    curl_setopt_array($feed, $options);
    $json= curl_exec($feed);
    curl_close($feed);
    return $json;
}

function parse_tweettext($tweet_text) {
    $text= substr($tweet_text, 0, -23);
    $short_url= substr($tweet_text, -23, 23);
    return array ('text'=>$text, 'short_url'=> $short_url);
}

function parse_tweetdatetime($tweetdatetime) {
    //Thu Aug 21 21:57:26 +0000 2014 Sun Mon Tue Wed Thu Fri Sat
    $months= array('Jan'=>'01', 'Feb'=>'02', 'Mar'=>'03', 'Apr'=>'04', 'May'=>'05', 'Jun'=>'06', 
                    'Jul'=>'07', 'Aug'=>'08', 'Sep'=>'09', 'Oct'=>'10', 'Nov'=>'11', 'Dec'=>'12');
    $GMT= substr($tweetdatetime, -10, 5);
    $year= substr($tweetdatetime, -4, 4);
    $month_str= substr($tweetdatetime, 4, 3);
    $month= $months[$month_str];
    $day= substr($tweetdatetime, 8, 2); 
    $dayofweek= substr($tweetdatetime, 0, 3);
    $time= substr($tweetdatetime, 11, 8);
    $date= $year.'-'.$month.'-'.$day;
    $datetime= $date.' '.$time;
    return array('datetime'=>$datetime, 'dayofweek'=>$dayofweek, 'GMT'=>$GMT);
    //datetime: "YYYY-MM-DD HH:MM:SS", dayofweek: Mon, Tue..., GMT: +####
}

//First check in the database the last id tweet:
$query= "SELECT MAX(tweets.id_tweet) AS id_last FROM tweets;";
$result= exec_query($query);
$row= mysql_fetch_object($result);
if ($result!= 0 && mysql_num_rows($result)) { //if error in query or not results
    $last_id= $row->id_last;
}
else {
    $last_id= null;
}

$json= returnTweets($last_id);
$tweets= json_decode($json, TRUE);

foreach ($tweets as $tweet) {
    $tweet_id= $tweet['id'];
    if (!empty($tweet_id)) { //if array is not empty
        $tweet_parsetext= parse_tweettext($tweet['text']);
        $tweet_text= utf8_encode($tweet_parsetext['text']);
        $tweet_shorturl= $tweet_parsetext['short_url'];
        $tweet_parsedt= parse_tweetdatetime($tweet['created_at']);
        $tweet_datetime= $tweet_parsedt['datetime'];
        $tweet_dayofweek= $tweet_parsedt['dayofweek'];
        $tweet_GMT= $tweet_parsedt['GMT'];
        //Insert the tweet into the database:
        $fields = array(
            'id_tweet' => $tweet_id,
            'text_tweet' => $tweet_text,
            'datetime_tweet' => $tweet_datetime,
            'dayofweek_tweet' => $tweet_dayofweek,
            'GMT_tweet' => $tweet_GMT,
            'shorturl_tweet' => $tweet_shorturl
            );
        $new_id= mysql_insert('tweets', $fields);
    }
} //end of foreach
?>

ट्वीट को सहेजने का कार्य:

function mysql_insert($table, $inserts) {
    $keys = array_keys($inserts);
    exec_query("START TRANSACTION;");
    $query= 'INSERT INTO `'.$table.'` (`'.implode('`,`', $keys).'`) VALUES (\''.implode('\',\'', $inserts).'\')';
    exec_query($query);
    $id= mysql_insert_id();
    if (mysql_error()) {
        exec_query("ROLLBACK;");
        die("Error: $query");
    }
    else {
        exec_query("COMMIT;");
    }
    return $id;
}

'यह काम करता है क्योंकि मुझे यह मेरे ब्लॉग में मिला है' मेरे पसंदीदा में से एक है। आपकी पोस्ट वास्तविक प्रश्न का उत्तर नहीं देती है। इसके अलावा आप जो php कोड इस्तेमाल कर रहे हैं, उसकी गुणवत्ता खराब है। थोड़ा यहाँ पढ़ें phptherightway.com । विशेष रूप से DB के बारे में
Maciej Paprocki

इसके अलावा, आपने अपनी सभी चाबियों और टोकन को सार्वजनिक कर दिया है तो आश्चर्यचकित न हों अगर कोई इसे लेता है और आपके ट्विटर अकाउंट को हैक करता है!
ग्वारटेन्लिच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.