{"id":310,"date":"2010-06-19T01:58:59","date_gmt":"2010-06-18T23:58:59","guid":{"rendered":"http:\/\/grummfy.be\/blog\/?p=310"},"modified":"2010-06-19T02:18:05","modified_gmt":"2010-06-19T00:18:05","slug":"webhook-google-code-recevoir-un-mail-a-chaque-commit","status":"publish","type":"post","link":"https:\/\/grummfy.be\/blog\/310","title":{"rendered":"WebHook Google Code &#8211; recevoir un mail \u00e0 chaque commit"},"content":{"rendered":"<p>Dans Google code il y a la possibilit\u00e9 d&rsquo;utiliser un gestionnaire de version tel que subversion (svn) ou mercurial (hg). C&rsquo;est bien pratique, mais malheureusement, de base, rien n&rsquo;est pr\u00e9vu pour pr\u00e9venir (except\u00e9 par flux RSS) les gens de ces mises \u00e0 jour. Cependant, Google code permet d&rsquo;utiliser un webhook en post commit.<\/p>\n<h2>Qu&rsquo;est-ce qu&rsquo;un webhook?<\/h2>\n<p>Un webhook c&rsquo;est un \u00ab\u00a0crochet web\u00a0\u00bb, c&rsquo;est-\u00e0-dire une URL a appel\u00e9e apr\u00e8s (avant ou pendant) une action X. Dans notre cas, apr\u00e8s chaque commit une URL est appel\u00e9e.<\/p>\n<h2>Utilisation<\/h2>\n<p>Voici un exemple de code que j&rsquo;utilise pour plusieurs de mes projets :<\/p>\n<pre lang=\"PHP\"><?php\r\n\/\/ project name\r\n$projects = array('mon-super-projet');\r\n\r\n\/\/ google code webhook key\r\n$keys = array(\r\n\t'b-box'\t=> 'Top-Secret_key_fourni_par_google-dans-l-adminsitration'\r\n);\r\n\r\n\/\/user agent from google code\r\n$useragent = 'Google Code Project Hosting (+http:\/\/code.google.com\/p\/support\/wiki\/PostCommitWebHooks)';\r\n\r\n\/\/email of all owner (eg. project chief)\r\n$owners = array('vous@example.com');\r\n\r\n\/\/email of all team members except owners\r\n$users = array('toi@example.com');\r\n\r\n\/\/sender of email\r\n$sender = 'WebHook mailer<webmaster@exemple.com>';\r\n\r\n\/\/----------------------------------------------------------------------\r\n$project = (isset($_GET['p']))?$_GET['p']:'';\r\n$revision = (isset($_GET['r']))?intval($_GET['r']):-99;\r\n$data = file_get_contents('php:\/\/input');\r\n$digest = (isset($_SERVER['HTTP_GOOGLE_CODE_PROJECT_HOSTING_HOOK_HMAC']))?$_SERVER['HTTP_GOOGLE_CODE_PROJECT_HOSTING_HOOK_HMAC']:'';\r\n\r\n\/\/----------------------------------------------------------------------\r\n\/**\r\n * Send a mail\r\n * @param string $from email of the sender : sample@example.com or \"name\"<sample@example.com>;\r\n * @param array $to [a] => list of email [cc], [bcc] (hidden), ...\r\n * @param string $subject\r\n * @param string $body\r\n * @return bool true if success\r\n *\/\r\nfunction mailer($from, array $to, $subject, $body)\r\n{\r\n\tif (empty($to))\r\n\t{\r\n\t\treturn false;\r\n\t}\r\n\r\n\t$headers = 'From: ' . $from . \"\\n\";\r\n\r\n\t$a = '';\r\n\r\n\tif (isset($to['a']) &amp;&amp; !empty($to['a']))\r\n\t{\r\n\t\t$a = implode(',', $to['a']);\r\n\t}\r\n\r\n\tif (isset($to['bcc']) &amp;&amp; !empty($to['bcc']))\r\n\t{\r\n\t\t$headers .= 'Bcc: ' . implode(',', $to['bcc']) . \"\\n\";\r\n\t}\r\n\r\n\tif (isset($to['cc']) &amp;&amp; !empty($to['cc']))\r\n\t{\r\n\t\t$headers .= 'Cc: ' . implode(',', $to['cc']) . \"\\n\";\r\n\t}\r\n\r\n\t$headers .= 'MIME-Version: 1.0' . \"\\n\";\r\n\t$headers .= 'Content-Type: text\/plain; charset=\"UTF-8\"' . \"\\n\";\r\n\t$headers .= 'Content-Transfer-Encoding: 8bit' . \"\\n\";\r\n\t$headers .= 'X-Mailer: PHP\/' . phpversion();\r\n\r\n\treturn mail($a, '[webhook]' . $subject, $body, $headers);\r\n}\r\n\r\nfunction failed($test_id, $msg)\r\n{\r\n\tglobal $sender, $owners;\r\n\r\n\t$msg .= \"\\n--\\nWebHook mail from the Google code project\";\r\n\r\n\tmailer($sender, array('bcc' => $owners), 'failed test #' . $test_id, $msg);\r\n\r\n\tdie('KO');\r\n}\r\n\r\nfunction get_ip()\r\n{ \r\n\treturn (isset($_SERVER['HTTP_X_FORWARDED_FOR']))?$_SERVER['HTTP_X_FORWARDED_FOR']:(isset($_SERVER['HTTP_CLIENT_IP']))?$_SERVER['HTTP_CLIENT_IP']:$_SERVER['REMOTE_ADDR'];\r\n}\r\n\r\n\/\/----------------------------------------------------------------------\r\nif ($useragent != $_SERVER['HTTP_USER_AGENT'])\r\n{\r\n\t\/\/ failed 1\r\n\tfailed(1, 'User agent is bad : ' . htmlspecialchars($_SERVER['HTTP_USER_AGENT']) . \"\\n\\nFrom : \" . get_ip());\r\n}\r\nelseif (empty($project) || !in_array($project, $projects))\r\n{\r\n\t\/\/ failed 2\r\n\tfailed(2, 'No project set : ' . htmlspecialchars($project) . \"\\n\\nFrom : \" . get_ip());\r\n}\r\nelse\r\n{\r\n\t$hmac = hash_hmac('md5', $data, $keys[ $project ]);\r\n\t$data = json_decode($data, true);\r\n\r\n\tif (empty($digest) || $digest != $hmac)\r\n\t{\r\n\t\t\/\/ failed 3\r\n\t\tfailed(3, 'Bad digest : ' . $digest . ' vs ' . $hmac . \"\\n\\nFrom : \" . get_ip());\r\n\t}\r\n\telseif (intval($data['revision_count']) != count($data['revisions']))\r\n\t{\r\n\t\t\/\/ failed 4\r\n\t\tfailed(4, 'Bad count : ' . count($data['revisions']) . ' vs ' . intval($data['revision_count']) . \"\\n\\nFrom : \" . get_ip());\r\n\t}\r\n\telse\r\n\t{\r\n\t\t$mail_body = '';\r\n\t\tforeach($data['revisions'] as $_revision)\r\n\t\t{\r\n\t\t\t$mail_body .= 'Revision : ' . \"\\t\" . htmlentities($_revision['revision']) . ' from ' . htmlentities($_revision['author']) . ' at ' . date('Y-m-d H:i', intval($_revision['timestamp'])) . \"\\n\";\r\n\t\t\t$mail_body .= 'Added : ' . \"\\t\" . implode(\"\\n\\t\\t\", htmlentities($_revision['added'])) . \"\\n\";\r\n\t\t\t$mail_body .= 'Modified : ' . \"\\t\" . implode(\"\\n\\t\\t\\t\", htmlentities($_revision['modified'])) . \"\\n\";\r\n\t\t\t$mail_body .= 'Removed : ' . \"\\t\" . implode(\"\\n\\t\\t\\t\", htmlentities($_revision['removed'])) . \"\\n\\n\";\r\n\/\/\t\t\t$mail_body .= 'URL : ' . \"\\t\\t\" . htmlentities($_revision['url']) . \"\\n\\n\";\r\n\t\t\t$mail_body .= 'Message : ' . \"\\t\" . htmlentities($_revision['message']) . \"\\n\\n\\n\";\r\n\/\/\t\t\t$_revision['path_count'];\r\n\t\t}\r\n\t\t$mail_body .= \"\\n--\\nWebHook mail from the Google code project : \" . $project . \"\\nhttp:\/\/code.google.com\/p\/\" . $project . \"\/\\n\";\r\n\r\n\t\tmailer($sender, array('bcc' => $owners + $users), '[' . $project . ']New revision #' . $revision, $mail_body);\r\n\t}\r\n}\r\n\r\nexit('OK');\r\n\r\n# EOF<\/pre>\n<\/p>\n<p>Plus d&rsquo;info : <a href=\"http:\/\/code.google.com\/p\/support\/wiki\/PostCommitWebHooks\">PostCommitWebHooks<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Google code et webhook : envoyer un email a chaque commit<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[9],"tags":[38,110,24,42,28,37],"class_list":["post-310","post","type-post","status-publish","format-standard","hentry","category-dev","tag-decouverte","tag-php","tag-programmation","tag-script","tag-trucs-et-astuces","tag-web"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"Google code et webhook : envoyer un email a chaque commit\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Grummfy\"\/>\n\t<meta name=\"google-site-verification\" content=\"d4qc9gnvtzVc9s5gDVkEqZIVZLo42Wi\/lYmFP7\/G0Kw=\" \/>\n\t<meta name=\"keywords\" content=\"google code,webhook,subversion,svn,php,email,tips,d\u00e9couverte,programmation,script,trucs et astuces,web,d\u00e9veloppement\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/grummfy.be\/blog\/310\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Grummfy&#039;s project\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Grummfy&#039;s project .:. WebHook Google Code - recevoir un mail \u00e0 chaque commit\" \/>\n\t\t<meta property=\"og:description\" content=\"Google code et webhook : envoyer un email a chaque commit\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/grummfy.be\/blog\/310\" \/>\n\t\t<meta property=\"fb:admins\" content=\"580961199\" \/>\n\t\t<meta property=\"article:tag\" content=\"google code\" \/>\n\t\t<meta property=\"article:tag\" content=\"webhook\" \/>\n\t\t<meta property=\"article:tag\" content=\"subversion\" \/>\n\t\t<meta property=\"article:tag\" content=\"svn\" \/>\n\t\t<meta property=\"article:tag\" content=\"php\" \/>\n\t\t<meta property=\"article:tag\" content=\"email\" \/>\n\t\t<meta property=\"article:tag\" content=\"tips\" \/>\n\t\t<meta property=\"article:tag\" content=\"d\u00e9couverte\" \/>\n\t\t<meta property=\"article:tag\" content=\"programmation\" \/>\n\t\t<meta property=\"article:tag\" content=\"script\" \/>\n\t\t<meta property=\"article:tag\" content=\"trucs et astuces\" \/>\n\t\t<meta property=\"article:tag\" content=\"web\" \/>\n\t\t<meta property=\"article:tag\" content=\"d\u00e9veloppement\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2010-06-18T23:58:59+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2010-06-19T00:18:05+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@Grummfy\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Grummfy&#039;s project .:. WebHook Google Code - recevoir un mail \u00e0 chaque commit\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Google code et webhook : envoyer un email a chaque commit\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/310#article\",\"name\":\"Grummfy's project .:. WebHook Google Code - recevoir un mail \\u00e0 chaque commit\",\"headline\":\"WebHook Google Code &#8211; recevoir un mail \\u00e0 chaque commit\",\"author\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/author\\\/admin#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/#organization\"},\"datePublished\":\"2010-06-19T01:58:59+02:00\",\"dateModified\":\"2010-06-19T02:18:05+02:00\",\"inLanguage\":\"fr-BE\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/310#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/310#webpage\"},\"articleSection\":\"D\\u00e9veloppement, d\\u00e9couverte, PHP, programmation, script, trucs et astuces, web\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/310#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog#listItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/grummfy.be\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/cat\\\/dev#listItem\",\"name\":\"D\\u00e9veloppement\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/cat\\\/dev#listItem\",\"position\":2,\"name\":\"D\\u00e9veloppement\",\"item\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/cat\\\/dev\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/310#listItem\",\"name\":\"WebHook Google Code &#8211; recevoir un mail \\u00e0 chaque commit\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog#listItem\",\"name\":\"Accueil\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/310#listItem\",\"position\":3,\"name\":\"WebHook Google Code &#8211; recevoir un mail \\u00e0 chaque commit\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/cat\\\/dev#listItem\",\"name\":\"D\\u00e9veloppement\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/#organization\",\"name\":\"Grummfy's project\",\"description\":\"Mes projets, mes r\\u00eaves, mes envies, ...\",\"url\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/author\\\/admin#author\",\"url\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/author\\\/admin\",\"name\":\"Grummfy\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/310#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/97f073e7de2fb1e9d5c5329eb7db2c6de1c5a80e8cfe9b1233473f78a1c908f6?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Grummfy\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/310#webpage\",\"url\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/310\",\"name\":\"Grummfy's project .:. WebHook Google Code - recevoir un mail \\u00e0 chaque commit\",\"description\":\"Google code et webhook : envoyer un email a chaque commit\",\"inLanguage\":\"fr-BE\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/310#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/author\\\/admin#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/author\\\/admin#author\"},\"datePublished\":\"2010-06-19T01:58:59+02:00\",\"dateModified\":\"2010-06-19T02:18:05+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/\",\"name\":\"Grummfy's project\",\"description\":\"Mes projets, mes r\\u00eaves, mes envies, ...\",\"inLanguage\":\"fr-BE\",\"publisher\":{\"@id\":\"https:\\\/\\\/grummfy.be\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Grummfy's project .:. WebHook Google Code - recevoir un mail \u00e0 chaque commit","description":"Google code et webhook : envoyer un email a chaque commit","canonical_url":"https:\/\/grummfy.be\/blog\/310","robots":"max-image-preview:large","keywords":"google code,webhook,subversion,svn,php,email,tips,d\u00e9couverte,programmation,script,trucs et astuces,web,d\u00e9veloppement","webmasterTools":{"google-site-verification":"d4qc9gnvtzVc9s5gDVkEqZIVZLo42Wi\/lYmFP7\/G0Kw=","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/grummfy.be\/blog\/310#article","name":"Grummfy's project .:. WebHook Google Code - recevoir un mail \u00e0 chaque commit","headline":"WebHook Google Code &#8211; recevoir un mail \u00e0 chaque commit","author":{"@id":"https:\/\/grummfy.be\/blog\/author\/admin#author"},"publisher":{"@id":"https:\/\/grummfy.be\/blog\/#organization"},"datePublished":"2010-06-19T01:58:59+02:00","dateModified":"2010-06-19T02:18:05+02:00","inLanguage":"fr-BE","mainEntityOfPage":{"@id":"https:\/\/grummfy.be\/blog\/310#webpage"},"isPartOf":{"@id":"https:\/\/grummfy.be\/blog\/310#webpage"},"articleSection":"D\u00e9veloppement, d\u00e9couverte, PHP, programmation, script, trucs et astuces, web"},{"@type":"BreadcrumbList","@id":"https:\/\/grummfy.be\/blog\/310#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog#listItem","position":1,"name":"Accueil","item":"https:\/\/grummfy.be\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog\/cat\/dev#listItem","name":"D\u00e9veloppement"}},{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog\/cat\/dev#listItem","position":2,"name":"D\u00e9veloppement","item":"https:\/\/grummfy.be\/blog\/cat\/dev","nextItem":{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog\/310#listItem","name":"WebHook Google Code &#8211; recevoir un mail \u00e0 chaque commit"},"previousItem":{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog#listItem","name":"Accueil"}},{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog\/310#listItem","position":3,"name":"WebHook Google Code &#8211; recevoir un mail \u00e0 chaque commit","previousItem":{"@type":"ListItem","@id":"https:\/\/grummfy.be\/blog\/cat\/dev#listItem","name":"D\u00e9veloppement"}}]},{"@type":"Organization","@id":"https:\/\/grummfy.be\/blog\/#organization","name":"Grummfy's project","description":"Mes projets, mes r\u00eaves, mes envies, ...","url":"https:\/\/grummfy.be\/blog\/"},{"@type":"Person","@id":"https:\/\/grummfy.be\/blog\/author\/admin#author","url":"https:\/\/grummfy.be\/blog\/author\/admin","name":"Grummfy","image":{"@type":"ImageObject","@id":"https:\/\/grummfy.be\/blog\/310#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/97f073e7de2fb1e9d5c5329eb7db2c6de1c5a80e8cfe9b1233473f78a1c908f6?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Grummfy"}},{"@type":"WebPage","@id":"https:\/\/grummfy.be\/blog\/310#webpage","url":"https:\/\/grummfy.be\/blog\/310","name":"Grummfy's project .:. WebHook Google Code - recevoir un mail \u00e0 chaque commit","description":"Google code et webhook : envoyer un email a chaque commit","inLanguage":"fr-BE","isPartOf":{"@id":"https:\/\/grummfy.be\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/grummfy.be\/blog\/310#breadcrumblist"},"author":{"@id":"https:\/\/grummfy.be\/blog\/author\/admin#author"},"creator":{"@id":"https:\/\/grummfy.be\/blog\/author\/admin#author"},"datePublished":"2010-06-19T01:58:59+02:00","dateModified":"2010-06-19T02:18:05+02:00"},{"@type":"WebSite","@id":"https:\/\/grummfy.be\/blog\/#website","url":"https:\/\/grummfy.be\/blog\/","name":"Grummfy's project","description":"Mes projets, mes r\u00eaves, mes envies, ...","inLanguage":"fr-BE","publisher":{"@id":"https:\/\/grummfy.be\/blog\/#organization"}}]},"og:locale":"fr_FR","og:site_name":"Grummfy's project","og:type":"article","og:title":"Grummfy's project .:. WebHook Google Code - recevoir un mail \u00e0 chaque commit","og:description":"Google code et webhook : envoyer un email a chaque commit","og:url":"https:\/\/grummfy.be\/blog\/310","fb:admins":"580961199","article:tag":["google code","webhook","subversion","svn","php","email","tips","d\u00e9couverte","programmation","script","trucs et astuces","web","d\u00e9veloppement"],"article:published_time":"2010-06-18T23:58:59+00:00","article:modified_time":"2010-06-19T00:18:05+00:00","twitter:card":"summary","twitter:site":"@Grummfy","twitter:title":"Grummfy's project .:. WebHook Google Code - recevoir un mail \u00e0 chaque commit","twitter:description":"Google code et webhook : envoyer un email a chaque commit"},"aioseo_meta_data":{"post_id":"310","title":"#site_title .:. WebHook Google Code - recevoir un mail \u00e0 chaque commit","description":"Google code et webhook : envoyer un email a chaque commit","keywords":[{"label":"google code","value":"google code"},{"label":"webhook","value":"webhook"},{"label":"subversion","value":"subversion"},{"label":"svn","value":"svn"},{"label":"PHP","value":"PHP"},{"label":"email","value":"email"},{"label":"tips","value":"tips"}],"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[],"defaultGraph":"","defaultPostTypeGraph":""},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-01-21 15:11:40","updated":"2025-06-04 00:24:42","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/grummfy.be\/blog\" title=\"Accueil\">Accueil<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/grummfy.be\/blog\/cat\/dev\" title=\"D\u00e9veloppement\">D\u00e9veloppement<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tWebHook Google Code \u2013 recevoir un mail \u00e0 chaque commit\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Accueil","link":"https:\/\/grummfy.be\/blog"},{"label":"D\u00e9veloppement","link":"https:\/\/grummfy.be\/blog\/cat\/dev"},{"label":"WebHook Google Code &#8211; recevoir un mail \u00e0 chaque commit","link":"https:\/\/grummfy.be\/blog\/310"}],"_links":{"self":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/comments?post=310"}],"version-history":[{"count":2,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/310\/revisions"}],"predecessor-version":[{"id":317,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/310\/revisions\/317"}],"wp:attachment":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/media?parent=310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/categories?post=310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/tags?post=310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}