{"id":232780,"date":"2023-01-27T12:49:00","date_gmt":"2023-01-27T09:49:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=232780"},"modified":"2022-11-10T17:44:13","modified_gmt":"2022-11-10T14:44:13","slug":"comment-afficher-les-archives-de-tweets-dans-wordpress-en-utilisant-php-et-mysql-avec-le-support-crontab","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/comment-afficher-les-archives-de-tweets-dans-wordpress-en-utilisant-php-et-mysql-avec-le-support-crontab\/","title":{"rendered":"Comment afficher les archives de tweets dans WordPress en utilisant PHP et MySQL avec le support Crontab\u00a0?"},"content":{"rendered":"\n<p>Le Tweeter n&rsquo;est pas bon pour afficher tous les tweets. J&rsquo;ai plus de 600 tweets \u00e0 ce jour (la plupart d&rsquo;entre eux sont envoy\u00e9s par <a href=\"https:\/\/helloacm.com\/php-function-to-post-to-twitter\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">script PHP<\/a> chez <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> ). Si vous souhaitez enregistrer localement une copie de tous vos tweets historiques dans votre propre base de donn\u00e9es, vous pouvez bien s\u00fbr demander une archive sur votre compte Twitter [Param\u00e8tres &#8211; Compte &#8211; Demander une archive].<\/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=\"Comment afficher les archives de tweets dans Wordpress en utilisant PHP et MySQL avec le support Crontab\u00a0?\" ><\/a><\/p>\n<p>demande-twitter-archive<\/p>\n<p>Et si vous pouviez enregistrer tous les tweets et les afficher dans votre blog (page WordPress)\u00a0? L&rsquo;id\u00e9e est g\u00e9niale car les tweets peuvent \u00eatre vus comme des articles \u00e0 des fins de r\u00e9f\u00e9rencement. Ainsi, vous devrez cr\u00e9er une table dans la base de donn\u00e9es wordpress, par exemple nommons-la <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=\"Comment afficher les archives de tweets dans Wordpress en utilisant PHP et MySQL avec le support Crontab\u00a0?\" ><\/a><\/p>\n<p>table d&rsquo;historique des tweets<\/p>\n<p>Nous avons quatre colonnes, \u00e0 savoir: <strong>tweet ID<\/strong>, <strong>text<\/strong>, <strong>date\/time<\/strong>, <strong>retweet count<\/strong>. Bien s\u00fbr, vous pouvez obtenir plus d&rsquo;informations \u00e0 partir des statuts de l&rsquo;API twitter <strong>\/user_timeline,<\/strong> mais nous ne sommes int\u00e9ress\u00e9s que par ces quatre \u00e9l\u00e9ments.<\/p>\n<h3>Stockage local<\/h3>\n<p>Il y a toujours une limite de d\u00e9bit pour l&rsquo;utilisation des API Twitter afin que vous ne puissiez pas les utiliser tr\u00e8s fr\u00e9quemment. Cependant, l&rsquo;id\u00e9e ici est d&rsquo;avoir un script PHP qui s&rsquo;ex\u00e9cute sur <a href=\"https:\/\/helloacm.com\/crontab-generator\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">crontab<\/a> (toutes les quelques heures) et r\u00e9cup\u00e8re les tweets et les stocke localement dans la base de donn\u00e9es.<\/p>\n<p>Nous pouvons utiliser la biblioth\u00e8que php <strong>TwitterOAuth<\/strong> pour interagir avec les API Twitter\u00a0:<\/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>Enregistrez ci-dessus sous <strong>twitter.php<\/strong> afin que nous puissions les inclure \u00e0 chaque fois si nous voulons acc\u00e9der aux API 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>Le <strong>mysql_query (&quot;SET NAMES utf8&quot;)<\/strong> s&rsquo;assure que les tweets sont ins\u00e9r\u00e9s correctement dans la base de donn\u00e9es. Le <strong>mb_detect_encoding<\/strong> v\u00e9rifiera que les tweets renvoy\u00e9s par les API sont en fait encod\u00e9s en UTF-8. Le script PHP ci-dessus v\u00e9rifiera les doublons (bas\u00e9 sur le Twitter ID) donc la premi\u00e8re fois un nouveau tweet sera ins\u00e9r\u00e9 mais la deuxi\u00e8me fois, il sera simplement mis \u00e0 jour.<\/p>\n<p>Il y a un nombre maximum de tweets que vous pouvez obtenir par un appel API, par exemple 300. Si vous avez plus de tweets, vous pouvez toujours appeler plusieurs fois le script pour t\u00e9l\u00e9charger tous les tweets. Cependant, nous devons sp\u00e9cifier le param\u00e8tre <strong>max_id<\/strong>, qui renverra les tweets plus anciens que cet ID (ID plus petits). Afin que nous puissions:<\/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&rsquo;id\u00e9e est de v\u00e9rifier le tweet le plus ancien (avec l&rsquo;identifiant min) et de ne renvoyer que les tweets plus anciens que cela, donc si vous ex\u00e9cutez les scripts plusieurs fois, vous importerez tous les tweets.<\/p>\n<p>Maintenant, nous avons les donn\u00e9es pr\u00eates et nous pouvons ex\u00e9cuter ce script sur le <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\">serveur VPS<\/a> toutes les quelques heures (la fr\u00e9quence d\u00e9pend de vous) en utilisant la commande <strong>crontab -e<\/strong>.<\/p>\n<h3>Afficher les tweets sur les pages WordPress<\/h3>\n<p>Maintenant, cette page <a href=\"https:\/\/helloacm.com\/tweets-history\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">helloacm.com\/tweets-history\/<\/a> montre tous les arbres de la base de donn\u00e9es. Vous auriez besoin d&rsquo;un plugin pour ex\u00e9cuter PHP\/HTML dans une page wordpress. Vous pouvez facilement trouver de tels plugins wordpress.<\/p>\n<p>Cr\u00e9ez une page wordpress et mettez les \u00e9l\u00e9ments suivants :<\/p>\n<pre><code>[ include ]tweets.php[ \/ include ]<\/code><\/pre>\n<p>Ensuite, nous devons mettre le script PHP dans ce <strong>tweets.php<\/strong> sp\u00e9cifi\u00e9 ci-dessus.<\/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>Nous utilisons <strong>get_query_var(&lsquo;page&rsquo;)<\/strong> pour obtenir la cha\u00eene de requ\u00eate afin de savoir \u00e0 quelle page nous sommes confront\u00e9s.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comment afficher les archives de tweets dans WordPress en utilisant PHP et MySQL avec le support 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":[915,893,717,832,993,841,862],"tags":[1167],"class_list":["post-232780","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-developpeur","category-guide-pour-les-debutants","category-marketing-de-contenu","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/232780","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=232780"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/232780\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/224614"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=232780"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=232780"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=232780"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}