{"id":232731,"date":"2023-01-27T12:33:00","date_gmt":"2023-01-27T09:33:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=232731"},"modified":"2022-11-10T17:31:57","modified_gmt":"2022-11-10T14:31:57","slug":"come-mostrare-larchivio-dei-tweet-in-wordpress-utilizzando-php-e-mysql-con-il-supporto-di-crontab","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/come-mostrare-larchivio-dei-tweet-in-wordpress-utilizzando-php-e-mysql-con-il-supporto-di-crontab\/","title":{"rendered":"Come mostrare l&#8217;archivio dei tweet in WordPress utilizzando PHP e MySQL con il supporto di Crontab?"},"content":{"rendered":"\n<p>Il Tweeter non \u00e8 bravo a visualizzare tutti i tweet. Finora ho pi\u00f9 di 600 tweet (la maggior parte di essi viene inviata tramite <a href=\"https:\/\/helloacm.com\/php-function-to-post-to-twitter\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">script PHP<\/a> a <a href=\"https:\/\/helloacm.com\/site-news-vps-upgraded-again-to-handle-large-traffic\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">VPS<\/a> ). Se vuoi salvare una copia di tutti i tuoi tweet storici sul tuo database in locale, puoi ovviamente richiedere un archivio sul tuo account Twitter [Impostazioni \u2013 Account \u2013 Richiedi Archivio].<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155905-61e570c313fac.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155905-61e570c313fac.jpg\" alt=\"Come mostrare l&#039;archivio dei tweet in Wordpress utilizzando PHP e MySQL con il supporto di Crontab?\" ><\/a><\/p>\n<p>richiesta-twitter-archivio<\/p>\n<p>Che ne dici di poter salvare tutti i tweet e visualizzarli nel tuo blog (pagina WordPress)? L&#8217;idea \u00e8 ottima perch\u00e9 i tweet possono essere visti come articoli per scopi SEO. Quindi, dovresti creare una tabella nel database di wordpress, ad esempio chiamiamola <code>tweets<\/code>.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155905-61e570c417eb7.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155905-61e570c417eb7.jpg\" alt=\"Come mostrare l&#039;archivio dei tweet in Wordpress utilizzando PHP e MySQL con il supporto di Crontab?\" ><\/a><\/p>\n<p>tweet-storia-tabella<\/p>\n<p>Abbiamo quattro colonne, queste sono: <strong>ID tweet<\/strong>, <strong>testo<\/strong>, <strong>data\/ora<\/strong>, <strong>conteggio dei retweet<\/strong>. Naturalmente, puoi ottenere maggiori informazioni dagli stati dell&#8217;API di Twitter <strong>\/user_timeline<\/strong>, ma a noi interessano solo questi quattro.<\/p>\n<h3>Memorizzazione in locale<\/h3>\n<p>C&#8217;\u00e8 sempre un limite di velocit\u00e0 per l&#8217;utilizzo delle API di Twitter, quindi non puoi usarle molto frequentemente. Tuttavia, l&#8217;idea qui \u00e8 di avere uno script PHP che venga eseguito su <a href=\"https:\/\/helloacm.com\/crontab-generator\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">crontab<\/a> (ogni poche ore) e recuperi i tweet e li memorizzi localmente nel database.<\/p>\n<p>Possiamo usare la libreria php di <strong>TwitterOAuth<\/strong> per interagire con le API di Twitter:<\/p>\n<pre><code>\/\/ &lt;a class=\"vglnk\" target=\"_blank\" href=\"http:\/\/helloacm.com\" rel=\"nofollow\"&gt;&lt;span&gt;helloacm&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;com&lt;\/span&gt;&lt;\/a&gt;\n\/\/ How to Show Tweets Archive in WordPress using PHP and MySQL with Crontab Support\nrequire('TwitterOAuth-1\/TwitterOAuth\/TwitterOAuth.php');\nrequire('TwitterOAuth-1\/TwitterOAuth\/Exception\/TwitterException.php');\nrequire('TwitterOAuth-1\/config.php'); \u00a0\nuse TwitterOAuthTwitterOAuth;\ndate_default_timezone_set('UTC');\n\u00a0\n$config = array(\n\u00a0 \u00a0 'consumer_key' \u00a0 \u00a0 \u00a0 =&gt; $twitter_apikey, \/\/ API key\n\u00a0 \u00a0 'consumer_secret' \u00a0 \u00a0=&gt; $twitter_apisecret, \/\/ API secret\n\u00a0 \u00a0 'oauth_token' \u00a0 \u00a0 \u00a0 \u00a0=&gt; $twitter_accesstoken, \/\/ not needed for app only\n\u00a0 \u00a0 'oauth_token_secret' =&gt; $twitter_accesstokensecret,\n\u00a0 \u00a0 'output_format' \u00a0 \u00a0 \u00a0=&gt; 'object'\n);\n$tw = new TwitterOAuth($config);<\/code><\/pre>\n<p>Salva sopra come <strong>twitter.php<\/strong> in modo da poterli includere ogni volta se vogliamo accedere alle API di Twitter.<\/p>\n<pre><code>\/\/ &lt;a class=\"vglnk\" target=\"_blank\" href=\"http:\/\/helloacm.com\" rel=\"nofollow\"&gt;&lt;span&gt;helloacm&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;com&lt;\/span&gt;&lt;\/a&gt;\n\/\/ How to Show Tweets Archive in WordPress using PHP and MySQL with Crontab Support\n\u00a0 require(\"twitter.php\"); \n\u00a0\n\u00a0 $params = array(\n\u00a0 \u00a0 \u00a0 'screen_name' =&gt; $twitter_screenname,\n\u00a0 \u00a0 \u00a0 'user_id' =&gt; $twitter_ownerid,\n\u00a0 \u00a0 \u00a0 'count' =&gt; 300,\n\u00a0 \u00a0 \u00a0 'include_rts' =&gt; 1,\n\u00a0 \u00a0 \u00a0 'exclude_replies' =&gt; false\n\u00a0 );\n\u00a0 $tweets = $tw-&gt;get('statuses\/user_timeline', $params);\n\u00a0\n\u00a0 mysql_query(\"SET NAMES utf8\");\n\u00a0 if(!empty($tweets)) {\n\u00a0 \u00a0 \u00a0 foreach($tweets as $tweet) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $id = $tweet-&gt;id;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $retweet_count = (integer)$tweet-&gt;retweet_count;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $created_at = $tweet-&gt;created_at;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $text = $tweet-&gt;text;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $text = mysql_real_escape_string($text);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $query = \"select count(1) from `tweets` where `id` = '$id'\";\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $result = mysql_query($query);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $cnt = mysql_result($result, 0, 0);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if ($cnt == 0) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $query = \"insert into `tweets` set `id`='$id', `text`='$text', `created_at`='$created_at',`retweet_count`='$retweet_count'\"; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 } else {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 $query = \"update `tweets` set `id`='$id', `text`='$text', `created_at`='$created_at',`retweet_count`='$retweet_count' where `id`='$id'\"; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 mysql_query($query);\n\u00a0 \u00a0 \u00a0 }\n\u00a0 }<\/code><\/pre>\n<p>mysql_query (<strong>&quot;SET NAMES utf8&quot;)<\/strong> assicura che i tweet siano inseriti correttamente nel database. <strong>mb_detect_encoding<\/strong> verificher\u00e0 che i tweet restituiti dalle API siano effettivamente codificati in UTF-8. Lo script PHP sopra controlla i duplicati (basato su Twitter ID) quindi la prima volta verr\u00e0 inserito un nuovo tweet ma la seconda verr\u00e0 semplicemente aggiornato.<\/p>\n<p>C&#8217;\u00e8 un numero massimo di tweet che puoi ottenere con una chiamata API, ad esempio 300. Se hai pi\u00f9 tweet, puoi sempre chiamare pi\u00f9 volte lo script per scaricare tutti i tweet. Tuttavia, dobbiamo specificare il parametro <strong>max_id<\/strong>, che restituir\u00e0 tweet pi\u00f9 vecchi di quell&#8217;ID (ID pi\u00f9 piccoli). Quindi possiamo:<\/p>\n<pre><code>\/\/ &lt;a class=\"vglnk\" target=\"_blank\" href=\"http:\/\/helloacm.com\" rel=\"nofollow\"&gt;&lt;span&gt;helloacm&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;com&lt;\/span&gt;&lt;\/a&gt;\n\/\/ How to Show Tweets Archive in WordPress using PHP and MySQL with Crontab Support\n\u00a0 $query = \"select min(`id`) from `tweets`\";\n\u00a0 $result = mysql_query($query) or die(mysql_error());\n\u00a0 $cnt = mysql_result($result, 0, 0); \u00a0 \u00a0\n\u00a0\n\u00a0 $params = array(\n\u00a0 \u00a0 \u00a0 'screen_name' =&gt; $twitter_screenname,\n\u00a0 \u00a0 \u00a0 'user_id' =&gt; $twitter_ownerid,\n\u00a0 \u00a0 \u00a0 'count' =&gt; 1000,\n\u00a0 \u00a0 \u00a0 'max_id' =&gt; $cnt,\n\u00a0 \u00a0 \u00a0 'include_rts' =&gt; 1,\n\u00a0 \u00a0 \u00a0 'exclude_replies' =&gt; false\n\u00a0 );<\/code><\/pre>\n<p>L&#8217;idea \u00e8 di controllare il tweet pi\u00f9 vecchio (con l&#8217;id minimo) e restituire solo i tweet pi\u00f9 vecchi di quello, quindi se esegui gli script pi\u00f9 volte, importerai tutti i tweet.<\/p>\n<p>Ora abbiamo i dati pronti e possiamo eseguire questo script sul <a href=\"https:\/\/helloacm.com\/mysql-server-stopped-due-of-out-of-memory-exception-on-ubuntu-vps\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">server VPS<\/a> ogni poche ore (frequenza a tua discrezione) usando <strong>crontab -e<\/strong> comando.<\/p>\n<h3>Visualizza i Tweet nelle pagine di WordPress<\/h3>\n<p>Ora, questa pagina <a href=\"https:\/\/helloacm.com\/tweets-history\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">helloacm.com\/tweets-history\/<\/a> mostra tutti gli alberi dal database. Avresti bisogno di un plugin per eseguire PHP\/HTML all&#8217;interno di una pagina wordpress. Puoi trovare facilmente tali plugin per wordpress.<\/p>\n<p>Crea una pagina wordpress e inserisci quanto segue:<\/p>\n<pre><code>[ include ]tweets.php[ \/ include ]<\/code><\/pre>\n<p>Quindi dobbiamo inserire lo script PHP in questo <strong>tweets.php<\/strong> specificato sopra.<\/p>\n<pre><code>&lt;php\n\/\/ &lt;a class=\"vglnk\" target=\"_blank\" href=\"http:\/\/helloacm.com\" rel=\"nofollow\"&gt;&lt;span&gt;helloacm&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;com&lt;\/span&gt;&lt;\/a&gt;\n\/\/ How to Show Tweets Archive in WordPress using PHP and MySQL with Crontab Support\n\u00a0 global $wpdb;\n\u00a0 \n\u00a0 $query = \"select count(1) from `tweets`\";\n\u00a0 $total = $wpdb-&gt;get_var($query);\n\u00a0 \n\u00a0 $per = 50;\n\u00a0 $page = get_query_var('page');\n\u00a0 if (!$page) {\n\u00a0 \u00a0 $page = 1;\n\u00a0 }\n\u00a0 \n\u00a0 \/\/ pagination\n\u00a0 $totalpages = ceil($total \/ $per);\n\u00a0 if ($page &gt; $totalpages) {\n\u00a0 \u00a0 $page = 1;\n\u00a0 }\n\u00a0 \n\u00a0 $lowerbound = ($page - 1) * $per;\n\u00a0 $upperbound = $lowerbound + $per;\n\u00a0 $lmt=\" limit \". $lowerbound. \",\". $per;\n\u00a0 \n\u00a0 $query = \"select * from `tweets` order by `id` desc $lmt\";\n\u00a0 \n\u00a0 $result = $wpdb-&gt;get_results($query);\n\u00a0 \n\u00a0 if ($result) {\n\u00a0 \u00a0 foreach ($result as $tweet) {\n\u00a0 \u00a0 \u00a0 $created_at = $tweet-&gt;created_at;\n\u00a0 \u00a0 \u00a0 $text = $tweet-&gt;text;\n\u00a0 \u00a0 \u00a0 $retweet_count = $tweet-&gt;retweet_count;\n\u00a0 \u00a0 \u00a0 \/\/ display tweets\n\u00a0 \u00a0 \u00a0 echo \"$text - $created_at\";\n\u00a0 \u00a0 \u00a0 if ($retweet_count &gt; 0) {\n\u00a0 \u00a0 \u00a0 \u00a0 echo \"($retweet_count Retweeted)\";\n\u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 }\n\u00a0 } \u00a0\n\u00a0 \n\u00a0 \/\/ show prev\/next page links\n\u00a0 if ($page &gt; 1) {\n\u00a0 \u00a0 echo \"&lt;a href='?page=\".($page-1).\"'&gt;Newer Tweets&lt;\/a&gt; - \";\n\u00a0 }\n\u00a0 if ($page &lt; $totalpages) {\n\u00a0 \u00a0 echo \"&lt;a href='?page=\".($page+1).\"'&gt;Older Tweets&lt;\/a&gt;\";\n\u00a0 }<\/code><\/pre>\n<p>Usiamo <strong>get_query_var(&#8216;page&#8217;)<\/strong> per ottenere la stringa di query in modo da sapere a quale pagina stiamo visualizzando.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Come mostrare l&#8217;archivio dei tweet in WordPress utilizzando PHP e MySQL con il supporto di Crontab?<\/p>\n","protected":false},"author":1,"featured_media":224614,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[918,896,835,996,720,844,865],"tags":[1168],"class_list":["post-232731","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-codice","category-guida-per-principianti","category-marketing-dei-contenuti","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/232731","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=232731"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/232731\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/224614"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=232731"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=232731"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=232731"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}