CINXE.COM
Programmable Search Engine Blog: October 2009
<!DOCTYPE html> <html class='v2 list-page' dir='ltr' itemscope='' itemtype='http://schema.org/Blog' lang='en' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'> <head> <link href='https://www.blogger.com/static/v1/widgets/3566091532-css_bundle_v2.css' rel='stylesheet' type='text/css'/> <title> Programmable Search Engine Blog: October 2009 </title> <meta content='width=device-width, height=device-height, minimum-scale=1.0, initial-scale=1.0, user-scalable=0' name='viewport'/> <meta content='IE=Edge' http-equiv='X-UA-Compatible'/> <meta content='Programmable Search Engine Blog' property='og:title'/> <meta content='en_US' property='og:locale'/> <meta content='https://programmablesearchengine.googleblog.com/2009/10/' property='og:url'/> <meta content='Programmable Search Engine Blog' property='og:site_name'/> <!-- Twitter Card properties --> <meta content='Programmable Search Engine Blog' property='og:title'/> <meta content='summary' name='twitter:card'/> <meta content='@google' name='twitter:creator'/> <link href='https://fonts.googleapis.com/css?family=Roboto:400italic,400,500,500italic,700,700italic' rel='stylesheet' type='text/css'/> <link href='https://fonts.googleapis.com/icon?family=Material+Icons' rel='stylesheet'/> <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js' type='text/javascript'></script> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-82055326-1', 'auto'); ga('send', 'pageview'); </script> <!-- End --> <style id='page-skin-1' type='text/css'><!-- /* <Group description="Header Color" selector="header"> <Variable name="header.background.color" description="Header Background" type="color" default="#ffffff"/> </Group> */ .header-outer { border-bottom: 1px solid #e0e0e0; background: #ffffff; } html, .Label h2, #sidebar .rss a, .BlogArchive h2, .FollowByEmail h2.title, .widget .post h2 { font-family: Roboto, sans-serif; } .plusfollowers h2.title, .post h2.title, .widget h2.title { font-family: Roboto, sans-serif; } .widget-item-control { height: 100%; } .widget.Header, #header { position: relative; height: 100%; width: 100%; } } .widget.Header .header-logo1 { float: left; margin-right: 15px; padding-right: 15px; border-right: 1px solid #ddd; } .header-title h2 { color: rgba(0,0,0,.54); display: inline-block; font-size: 40px; font-family: Roboto, sans-serif; font-weight: normal; line-height: 48px; vertical-align: top; } .header-inner { background-repeat: no-repeat; background-position: right 0px; } .post-author, .byline-author { font-size: 14px; font-weight: normal; color: #757575; color: rgba(0,0,0,.54); } .post-content .img-border { border: 1px solid rgb(235, 235, 235); padding: 4px; } .header-title a { text-decoration: none !important; } pre { border: 1px solid #bbbbbb; margin-top: 1em 0 0 0; padding: 0.99em; overflow-x: auto; overflow-y: auto; } pre, code { font-size: 9pt; background-color: #fafafa; line-height: 125%; font-family: monospace; } pre, code { color: #060; font: 13px/1.54 "courier new",courier,monospace; } .header-left .header-logo1 { width: 128px !important; } .header-desc { line-height: 20px; margin-top: 8px; } .fb-custom img, .twitter-custom img, .gplus-share img { cursor: pointer; opacity: 0.54; } .fb-custom img:hover, .twitter-custom img:hover, .gplus-share img:hover { opacity: 0.87; } .fb-like { width: 80px; } .post .share { float: right; } #twitter-share{ border: #CCC solid 1px; border-radius: 3px; background-image: -webkit-linear-gradient(top,#ffffff,#dedede); } .twitter-follow { background: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFOlelKVj0j-gl40kQyVYLdQoAsPgCBR1gGl6SZAwkopsSg64b5oEeQyTojQLgUj0XkZA5tdDGDCEwIfOenCkTrRad9FDoCZp2yM0nWGn0HZLGYdFAZL4YZ7NtbsELafeYE9ZobpssgxWc/s1600/twitter-bird.png) no-repeat left center; padding-left: 18px; font: normal normal normal 11px/18px 'Helvetica Neue',Arial,sans-serif; font-weight: bold; text-shadow: 0 1px 0 rgba(255,255,255,.5); cursor: pointer; margin-bottom: 10px; } .twitter-fb { padding-top: 2px; } .fb-follow-button { background: -webkit-linear-gradient(#4c69ba, #3b55a0); background: -moz-linear-gradient(#4c69ba, #3b55a0); background: linear-gradient(#4c69ba, #3b55a0); border-radius: 2px; height: 18px; padding: 4px 0 0 3px; width: 57px; border: #4c69ba solid 1px; } .fb-follow-button a { text-decoration: none !important; text-shadow: 0 -1px 0 #354c8c; text-align: center; white-space: nowrap; font-size: 11px; color: white; vertical-align: top; } .fb-follow-button a:visited { color: white; } .fb-follow { padding: 0px 5px 3px 0px; width: 14px; vertical-align: bottom; } .gplus-wrapper { margin-top: 3px; display: inline-block; vertical-align: top; } .twitter-custom, .gplus-share { margin-right: 12px; } .fb-follow-button{ margin: 10px auto; } --></style> <style id='template-skin-1' type='text/css'><!-- .header-outer { clear: both; } .header-inner { margin: auto; padding: 0px; } .footer-outer { background: #f5f5f5; clear: both; margin: 0; } .footer-inner { margin: auto; padding: 0px; } .footer-inner-2 { /* Account for right hand column elasticity. */ max-width: calc(100% - 248px); } .google-footer-outer { clear: both; } .cols-wrapper, .google-footer-outer, .footer-inner, .header-inner { max-width: 978px; margin-left: auto; margin-right: auto; } .cols-wrapper { margin: auto; clear: both; margin-top: 60px; margin-bottom: 60px; overflow: hidden; } .col-main-wrapper { float: left; width: 100%; } .col-main { margin-right: 278px; max-width: 660px; } .col-right { float: right; width: 248px; margin-left: -278px; } /* Tweaks for layout mode. */ body#layout .google-footer-outer { display: none; } body#layout .header-outer, body#layout .footer-outer { background: none; } body#layout .header-inner { height: initial; } body#layout .cols-wrapper { margin-top: initial; margin-bottom: initial; } --></style> <!-- start all head --> <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/> <meta content='blogger' name='generator'/> <link href='https://programmablesearchengine.googleblog.com/favicon.ico' rel='icon' type='image/x-icon'/> <link href='https://programmablesearchengine.googleblog.com/2009/10/' rel='canonical'/> <link rel="alternate" type="application/atom+xml" title="Programmable Search Engine Blog - Atom" href="https://programmablesearchengine.googleblog.com/feeds/posts/default" /> <link rel="alternate" type="application/rss+xml" title="Programmable Search Engine Blog - RSS" href="https://programmablesearchengine.googleblog.com/feeds/posts/default?alt=rss" /> <link rel="service.post" type="application/atom+xml" title="Programmable Search Engine Blog - Atom" href="https://www.blogger.com/feeds/4174100360396497591/posts/default" /> <!--Can't find substitution for tag [blog.ieCssRetrofitLinks]--> <meta content='https://programmablesearchengine.googleblog.com/2009/10/' property='og:url'/> <meta content='Programmable Search Engine Blog' property='og:title'/> <meta content='The latest news, updates and tips from the Programmable Search Engine team' property='og:description'/> <!-- end all head --> <base target='_self'/> <style> html { font-family: Roboto, sans-serif; -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; } body { padding: 0; /* This ensures that the scroll bar is always present, which is needed */ /* because content render happens after page load; otherwise the header */ /* would "bounce" in-between states. */ min-height: 150%; } h2 { font-size: 16px; } h1, h2, h3, h4, h5 { line-height: 2em; } html, h4, h5, h6 { font-size: 14px; } a, a:visited { color: #4184F3; text-decoration: none; } a:focus, a:hover, a:active { text-decoration: none; } .Header { margin-top: 15px; } .Header h1 { font-size: 32px; font-weight: 300; line-height: 32px; height: 42px; } .header-inner .Header .titlewrapper { padding: 0; margin-top: 30px; } .header-inner .Header .descriptionwrapper { padding: 0; margin: 0; } .cols-wrapper { margin-top: 56px; } .header-outer, .cols-wrapper, .footer-outer, .google-footer-outer { padding: 0 60px; } .header-inner { height: 256px; position: relative; } html, .header-inner a { color: #212121; color: rgba(0,0,0,.87); } .header-inner .google-logo { display: inline-block; background-size: contain; z-index: 1; height: 46px; overflow: hidden; margin-top: 4px; margin-right: 8px; } .header-left { position: absolute; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); margin-top: 12px; width: 100%; } .google-logo { margin-left: -4px; } #google-footer { position: relative; font-size: 13px; list-style: none; text-align: right; } #google-footer a { color: #444; } #google-footer ul { margin: 0; padding: 0; height: 144px; line-height: 144px; } #google-footer ul li { display: inline; } #google-footer ul li:before { color: #999; content: "\00b7"; font-weight: bold; margin: 5px; } #google-footer ul li:first-child:before { content: ''; } #google-footer .google-logo-dark { left: 0; margin-top: -16px; position: absolute; top: 50%; } /** Sitemap links. **/ .footer-inner-2 { font-size: 14px; padding-top: 42px; padding-bottom: 74px; } .footer-inner-2 .HTML h2 { color: #212121; color: rgba(0,0,0,.87); font-size: 14px; font-weight: 500; padding-left: 0; margin: 10px 0; } .footer-inner-2 .HTML ul { font-weight: normal; list-style: none; padding-left: 0; } .footer-inner-2 .HTML li { line-height: 24px; padding: 0; } .footer-inner-2 li a { color: rgba(65,132,243,.87); } /** Archive widget. **/ .BlogArchive { font-size: 13px; font-weight: normal; } .BlogArchive .widget-content { display: none; } .BlogArchive h2, .Label h2 { color: #4184F3; text-decoration: none; } .BlogArchive .hierarchy li { display: inline-block; } /* Specificity needed here to override widget CSS defaults. */ .BlogArchive #ArchiveList ul li, .BlogArchive #ArchiveList ul ul li { margin: 0; padding-left: 0; text-indent: 0; } .BlogArchive .intervalToggle { cursor: pointer; } .BlogArchive .expanded .intervalToggle .new-toggle { -ms-transform: rotate(180deg); transform: rotate(180deg); } .BlogArchive .new-toggle { float: right; padding-top: 3px; opacity: 0.87; } #ArchiveList { text-transform: uppercase; } #ArchiveList .expanded > ul:last-child { margin-bottom: 16px; } #ArchiveList .archivedate { width: 100%; } /* Months */ .BlogArchive .items { max-width: 150px; margin-left: -4px; } .BlogArchive .expanded .items { margin-bottom: 10px; overflow: hidden; } .BlogArchive .items > ul { float: left; height: 32px; } .BlogArchive .items a { padding: 0 4px; } .Label { font-size: 13px; font-weight: normal; } .sidebar-icon { display: inline-block; width: 24px; height: 24px; vertical-align: middle; margin-right: 12px; margin-top: -1px } .Label a { margin-right: 4px; } .Label .widget-content { display: none; } .FollowByEmail { font-size: 13px; font-weight: normal; } .FollowByEmail h2 { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAALCAYAAACZIGYHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUBJREFUeNrMkSGLAlEUhb+ZB4JFi8mx2cz+ApvhRUGTcUCrNqNJDYIi+DO0GUwmQXDK2DSIoGgZcSaIjDrzwrK4ssvChj1w0733O+fdp+m6PozH4yQSCfb7Pa7r8pOi0SjJZBLP8zgej4gAIMvlMuPxmADIYrHger1+C6lUKmo+NJ/NZojb7SZDWiwWo1qtks1msW2bw+HwZdkwDHq9HvV6nel0SqvVYrvdIh6Ph3Qch+VyqRYLhQJSSjRNw7IsfN9XgGKxSLfbJZfL0e/3aTabrFYr7vc7IujLcOh8PqunrNdr0uk0pVKJVCpFJBJRgEajweVyod1uMxgM2O12BAGUgRbU8DV2JpOhVquRz+cRQii3+XxOp9NRN3jVR5LPOp1OjEYjlSL8hclkgmmabDabt4d+m+S30vkD/R/IU4ABAPTZgnZdmG/PAAAAAElFTkSuQmCC"); background-repeat: no-repeat; background-position: 0 50%; text-indent: 30px; } .FollowByEmail .widget-content { display: none; } .searchBox input { border: 1px solid #eee; color: #212121; color: rgba(0,0,0,.87); font-size: 14px; padding: 8px 8px 8px 40px; width: 164px; font-family: Roboto, sans-serif; background: url("https://www.gstatic.com/images/icons/material/system/1x/search_grey600_24dp.png") 8px center no-repeat; } .searchBox ::-webkit-input-placeholder { /* WebKit, Blink, Edge */ color: rgba(0,0,0,.54); } .searchBox :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #000; opacity: 0.54; } .searchBox ::-moz-placeholder { /* Mozilla Firefox 19+ */ color: #000; opacity: 0.54; } .searchBox :-ms-input-placeholder { /* Internet Explorer 10-11 */ color: #757575; } .widget-item-control { margin-top: 0px; } .section { margin: 0; padding: 0; } #sidebar-top { border: 1px solid #eee; } #sidebar-top > div { margin: 16px 0; } .widget ul { line-height: 1.6; } /*main post*/ .post { margin-bottom:30px; } #main .post .title { margin: 0; } #main .post .title a { color: #212121; color: rgba(0,0,0,.87); font-weight: normal; font-size: 24px; } #main .post .title a:hover { text-decoration:none; color:#4184F3; } .message, #main .post .post-header { margin: 0; padding: 0; } #main .post .post-header .caption, #main .post .post-header .labels-caption, #main .post .post-footer .caption, #main .post .post-footer .labels-caption { color: #444; font-weight: 500; } #main .tr-caption-container td { text-align: left; } #main .post .tr-caption { color: #757575; color: rgba(0,0,0,.54); display: block; max-width: 560px; padding-bottom: 20px; } #main .post .tr-caption-container { line-height: 24px; margin: -1px 0 0 0 !important; padding: 4px 0; text-align: left; } #main .post .post-header .published{ font-size:11px; font-weight:bold; } .post-header .publishdate { font-size: 17px; font-weight:normal; color: #757575; color: rgba(0,0,0,.54); } #main .post .post-footer{ font-size:12px; padding-bottom: 21px; } .label-footer { margin-bottom: 12px; margin-top: 12px; } .comment-img { margin-right: 16px; opacity: 0.54; vertical-align: middle; } #main .post .post-header .published { margin-bottom: 40px; margin-top: -2px; } .post .post-content { color: #212121; color: rgba(0,0,0,.87); font-size: 17px; margin: 25px 0 36px 0; line-height: 32px; } .post-body .post-content ul, .post-body .post-content ol { margin: 16px 0; padding: 0 48px; } .post-summary { display: none; } /* Another old-style caption. */ .post-content div i, .post-content div + i { font-size: 14px; font-style: normal; color: #757575; color: rgba(0,0,0,.54); display: block; line-height: 24px; margin-bottom: 16px; text-align: left; } /* Another old-style caption (with link) */ .post-content a > i { color: #4184F3 !important; } /* Old-style captions for images. */ .post-content .separator + div:not(.separator) { margin-top: -16px; } /* Capture section headers. */ .post-content br + br + b, .post-content .space + .space + b, .post-content .separator + b { display: inline-block; margin-bottom: 8px; margin-top: 24px; } .post-content li { line-height: 32px; } /* Override all post images/videos to left align. */ .post-content .separator, .post-content > div { text-align: left; } .post-content .separator > a, .post-content .separator > span { margin-left: 0 !important; } .post-content img { max-width: 100%; height: auto; width: auto; } .post-content .tr-caption-container img { margin-bottom: 12px; } .post-content iframe, .post-content embed { max-width: 100%; } .post-content .carousel-container { margin-bottom: 48px; } #main .post-content b { font-weight: 500; } /* These are the main paragraph spacing tweaks. */ #main .post-content br { content: ' '; display: block; padding: 4px; } .post-content .space { display: block; height: 8px; } .post-content iframe + .space, .post-content iframe + br { padding: 0 !important; } #main .post .jump-link { margin-bottom:10px; } .post-content img, .post-content iframe { margin: 30px 0 20px 0; } .post-content > img:first-child, .post-content > iframe:first-child { margin-top: 0; } .col-right .section { padding: 0 16px; } #aside { background:#fff; border:1px solid #eee; border-top: 0; } #aside .widget { margin:0; } #aside .widget h2, #ArchiveList .toggle + a.post-count-link { color: #212121; color: rgba(0,0,0,.87); font-weight: 400 !important; margin: 0; } #ArchiveList .toggle { float: right; } #ArchiveList .toggle .material-icons { padding-top: 4px; } #sidebar .tab { cursor: pointer; } #sidebar .tab .arrow { display: inline-block; float: right; } #sidebar .tab .icon { display: inline-block; vertical-align: top; height: 24px; width: 24px; margin-right: 13px; margin-left: -1px; margin-top: 1px; color: #757575; color: rgba(0,0,0,.54); } #sidebar .widget-content > :first-child { padding-top: 8px; } #sidebar .active .tab .arrow { -ms-transform: rotate(180deg); transform: rotate(180deg); } #sidebar .arrow { color: #757575; color: rgba(0,0,0,.54); } #sidebar .widget h2 { font-size: 14px; line-height: 24px; display: inline-block; } #sidebar .widget .BlogArchive { padding-bottom: 8px; } #sidebar .widget { border-bottom: 1px solid #eee; box-shadow: 0px 1px 0 white; margin-bottom: 0; padding: 14px 0; min-height: 20px; } #sidebar .widget:last-child { border-bottom: none; box-shadow: none; margin-bottom: 0; } #sidebar ul { margin: 0; padding: 0; } #sidebar ul li { list-style:none; padding:0; } #sidebar ul li a { line-height: 32px; } #sidebar .archive { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUeNpiNDY23s9AAWBioBCwYBM8c+YMVsUmJibEGYBNMS5DaeMFfDYSZQA2v9I3FrB5AZeriI4FmnrBccCT8mhmGs1MwyAzAQQYAKEWG9zm9QFEAAAAAElFTkSuQmCC"); height: 24px; line-height: 24px; padding-left: 30px; } #sidebar .labels { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUxJREFUeNpiNDY23s9AAMycOfM7UF05kHkZmzwTMkdSUhKrIcXFxZy3bt3qBjIN8RrS09PDsHnzZjCNDr58+cKQlpbGDjSoHcg1w2oIyAUODg5gARCNzUVIBrUCuVYYhjx//pzhwIEDYAEQDeJjA1CDWIAGNQK59jBxRuSABbkAlwHIgIeHh2HWrFn/1NTU2oDcvSgBS4wBSC5iArqoCsj1YGIgEyAZVMoEchqlBjEB/cZAiUHg2AEGznpKDAImxOeM////B4VLKtBvEUCngZ1ILKivr3/u6+ubBzJAGZQ9gC5aQoqLgAY8BhkAZL4BuQQkxgXE34A4BuiiZEIuAhrwEGhAEZD5DpzYoIaA2UAM4kQADUrHZRDUgAIg8wO2XAwzbQXQa5OweQ1owB10AyA6gS7BgX1u3ry5397eHow3bdo0EyjGi00tQIABANPgyAH1q1eaAAAAAElFTkSuQmCC"); height: 20px; line-height: 20px; padding-left: 30px; } #sidebar .rss a { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX5JREFUeNqsVDGSgkAQHL2rIiIikohIc/EBRkbwAIwuwgfwAXiAD9AHSI7kEkECRCb6AIyINDLx7K0aa6kT7uq0q7YYtnZ7umdnt7darXbr9Zpegeu61DNNc0dvwCcH4/GYJpMJnc9nOhwOVJbl/4hAAokMECZJQtvt9k+kH7qufyEYDAakqqqYxFdRFBqNRmTbNg2HQ0rTlK7XayvR0xqBdDqdkuM4dE/0ULhYLOh4PHYrknG5XGi/31MYhuL/nkwonM1mlGUZ1XXdrsiyLGEDhY7juJEZ1u5tIixDGdYhmYw+B7CAzPP5nDabjdgIAgCksMX1832/3drtdqPT6SQWapomiGEFNkDEdpDMMAzK81ys/7XYy+XyoQgq2WoURSIJ2iIIgp/WZCCTvFm2wgeAU31aI3Q2GhIDMeB53qPYPIcm5VrxXIOIOxsDMStjVawAc1VViRgN22lNBiuQN3GR+SY07hpOoStmFQAKXRRFY93bnpG+fONfedi+BRgAbkS8Fxp7QQIAAAAASUVORK5CYII="); } #sidebar .subscription a { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAALCAYAAACZIGYHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUBJREFUeNrMkSGLAlEUhb+ZB4JFi8mx2cz+ApvhRUGTcUCrNqNJDYIi+DO0GUwmQXDK2DSIoGgZcSaIjDrzwrK4ssvChj1w0733O+fdp+m6PozH4yQSCfb7Pa7r8pOi0SjJZBLP8zgej4gAIMvlMuPxmADIYrHger1+C6lUKmo+NJ/NZojb7SZDWiwWo1qtks1msW2bw+HwZdkwDHq9HvV6nel0SqvVYrvdIh6Ph3Qch+VyqRYLhQJSSjRNw7IsfN9XgGKxSLfbJZfL0e/3aTabrFYr7vc7IujLcOh8PqunrNdr0uk0pVKJVCpFJBJRgEajweVyod1uMxgM2O12BAGUgRbU8DV2JpOhVquRz+cRQii3+XxOp9NRN3jVR5LPOp1OjEYjlSL8hclkgmmabDabt4d+m+S30vkD/R/IU4ABAPTZgnZdmG/PAAAAAElFTkSuQmCC"); } #sidebar-bottom { background: #f5f5f5; border-top:1px solid #eee; } #sidebar-bottom .widget { border-bottom: 1px solid #e0e0e0; padding: 15px 0; text-align: center; } #sidebar-bottom > div:last-child { border-bottom: 0; } #sidebar-bottom .text { line-height: 20px; } /* Home, forward, and backward pagination. */ .blog-pager { border-top : 1px #e0e0e0 solid; padding-top: 10px; margin-top: 15px; text-align: right !important; } #blog-pager { margin-botom: 0; margin-top: -14px; padding: 16px 0 0 0; } #blog-pager a { display: inline-block; } .blog-pager i.disabled { opacity: 0.2 !important; } .blog-pager i { color: black; margin-left: 16px; opacity: 0.54; } .blog-pager i:hover, .blog-pager i:active { opacity: 0.87; } #blog-pager-older-link, #blog-pager-newer-link { float: none; } .gplus-profile { background-color: #fafafa; border: 1px solid #eee; overflow: hidden; width: 212px; } .gplus-profile-inner { margin-left: -1px; margin-top: -1px; } /* Sidebar follow buttons. */ .followgooglewrapper { padding: 12px 0 0 0; } .loading { visibility: hidden; } .detail-page .post-footer .cmt_iframe_holder { padding-top: 40px !important; } /** Desktop **/ @media (max-width: 900px) { .col-right { display: none; } .col-main { margin-right: 0; min-width: initial; } .footer-outer { display: none; } .cols-wrapper { min-width: initial; } .google-footer-outer { background-color: #f5f5f5; } } /** Tablet **/ @media (max-width: 712px) { .header-outer, .cols-wrapper, .footer-outer, .google-footer-outer { padding: 0 40px; } } /* An extra breakpoint accommodating for long blog titles. */ @media (max-width: 600px) { .header-left { height: 100%; top: inherit; margin-top: 0; -webkit-transform: initial; transform: initial; } .header-title { margin-top: 18px; } .header-inner .google-logo { height: 40px; margin-top: 3px; } .header-inner .google-logo img { height: 42px; } .header-title h2 { font-size: 32px; line-height: 40px; } .header-desc { bottom: 24px; position: absolute; } } /** Mobile/small desktop window; also landscape. **/ @media (max-width: 480px), (max-height: 480px) { .header-outer, .cols-wrapper, .footer-outer, .google-footer-outer { padding: 0 16px; } .cols-wrapper { margin-top: 0; } .post-header .publishdate, .post .post-content { font-size: 16px; } .post .post-content { line-height: 28px; margin-bottom: 30px; } .post { margin-top: 30px; } .byline-author { display: block; font-size: 12px; line-height: 24px; margin-top: 6px; } #main .post .title a { font-weight: 500; color: #4c4c4c; color: rgba(0,0,0,.70); } #main .post .post-header { padding-bottom: 12px; } #main .post .post-header .published { margin-bottom: -8px; margin-top: 3px; } .post .read-more { display: block; margin-top: 14px; } .post .tr-caption { font-size: 12px; } #main .post .title a { font-size: 20px; line-height: 30px; } .post-content iframe { /* iframe won't keep aspect ratio when scaled down. */ max-height: 240px; } .post-content .separator img, .post-content .tr-caption-container img, .post-content iframe { margin-left: -16px; max-width: inherit; width: calc(100% + 32px); } .post-content table, .post-content td { width: 100%; } #blog-pager { margin: 0; padding: 16px 0; } /** List page tweaks. **/ .list-page .post-original { display: none; } .list-page .post-summary { display: block; } .list-page .comment-container { display: none; } .list-page #blog-pager { padding-top: 0; border: 0; margin-top: -8px; } .list-page .label-footer { display: none; } .list-page #main .post .post-footer { border-bottom: 1px solid #eee; margin: -16px 0 0 0; padding: 0 0 20px 0; } .list-page .post .share { display: none; } /** Detail page tweaks. **/ .detail-page .post-footer .cmt_iframe_holder { padding-top: 32px !important; } .detail-page .label-footer { margin-bottom: 0; } .detail-page #main .post .post-footer { padding-bottom: 0; } .detail-page #comments { display: none; } } [data-about-pullquote], [data-is-preview], [data-about-syndication] { display: none; } </style> <noscript> <style> .loading { visibility: visible }</style> </noscript> <script type='text/javascript'> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-961555-71', 'auto', 'blogger'); ga('blogger.send', 'pageview'); </script> <link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=4174100360396497591&zx=d617fae0-2d07-4a53-919a-d054a7ce1892' media='none' onload='if(media!='all')media='all'' rel='stylesheet'/><noscript><link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=4174100360396497591&zx=d617fae0-2d07-4a53-919a-d054a7ce1892' rel='stylesheet'/></noscript> <meta name='google-adsense-platform-account' content='ca-host-pub-1556223355139109'/> <meta name='google-adsense-platform-domain' content='blogspot.com'/> </head> <body> <script type='text/javascript'> //<![CDATA[ var axel = Math.random() + ""; var a = axel * 10000000000000; document.write('<iframe src="https://2542116.fls.doubleclick.net/activityi;src=2542116;type=gblog;cat=googl0;ord=ord=' + a + '?" width="1" height="1" frameborder="0" style="display:none"></iframe>'); //]]> </script> <noscript> <img alt='' height='1' src='https://ad.doubleclick.net/ddm/activity/src=2542116;type=gblog;cat=googl0;ord=1?' width='1'/> </noscript> <!-- Header --> <div class='header-outer'> <div class='header-inner'> <div class='section' id='header'><div class='widget Header' data-version='1' id='Header1'> <div class='header-left'> <div class='header-title'> <a class='google-logo' href='https://programmablesearchengine.googleblog.com/'> <img height='50' src='https://www.gstatic.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png'/> </a> <a href='/.'> <h2> Programmable Search Engine Blog </h2> </a> </div> <div class='header-desc'> The latest news, updates and tips from the Programmable Search Engine team </div> </div> </div></div> </div> </div> <!-- all content wrapper start --> <div class='cols-wrapper loading'> <div class='col-main-wrapper'> <div class='col-main'> <div class='section' id='main'><div class='widget Blog' data-version='1' id='Blog1'> <div class='post' data-id='8317754003429138563' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2009/10/three-birthday-candles-for-custom-search.html' itemprop='url' title='Three birthday candles for Custom Search'> Three birthday candles for Custom Search </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Monday, October 26, 2009 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> Last Friday was the third anniversary of Custom Search! Here's a photo of our celebratory cake, baked by John Skidgel, our multitalented Senior Interaction Designer. Our <span class="il">cake</span> was baked in between code reviews for our brand new Look and Feel tab. The magnifying glass was a chocolate <span class="il">cake</span> and the handle and cubes are made from marshmallow and rice cereal squares. Luckily, the local cooking store had ready-made fondant in Google colors. :-)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsR5zGs_4Q9_rcutHzrKVQ2o0hZ7tieZFlB-2NKjToNGryYPBF4U1H9yXEih_LBqsRs0Rd762JeVYXQsx8IJmYn6tOwkn9pSMNvYg1keSN_71LmsUe3_GUMTUuiat9aH9CvsRG3hBapnqv/s1600-h/custom_search_cake.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5397025515713578498" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsR5zGs_4Q9_rcutHzrKVQ2o0hZ7tieZFlB-2NKjToNGryYPBF4U1H9yXEih_LBqsRs0Rd762JeVYXQsx8IJmYn6tOwkn9pSMNvYg1keSN_71LmsUe3_GUMTUuiat9aH9CvsRG3hBapnqv/s400/custom_search_cake.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 264px;" /></a>Thanks to <i>you</i>, our users, the Custom Search platform has grown over the last three years: We now have millions of registered Custom Search engines globally, and are serving many tens of millions of search queries per day. Custom Search, now among the <a href="http://news.ghostery.com/post/134211102/top-10-widgets-on-the-web" id="h0lw" target="_blank" title="top 2">top two</a> widgets on the web, powers websites ranging from the New York Times, MacWorld and Orbitz to individual and topical websites. Since the launch of the <a href="http://googleblog.blogspot.com/2009/06/blog-search-and-beyond.html" id="k:jw" target="_blank" title="Blogger gadget">Blogger gadget</a> a few months back, hundreds of thousands of bloggers use it to help people find information on their sites. Many applications, such as <a href="http://googleblog.blogspot.com/2008/09/adobe-users-get-help-with-google-site.html" id="ek7k" target="_blank" title="Community Help">Community Help</a> within Adobe Creative Suite 4 and topical search on About.com, make use of our unique features, such as label refinements, promotions and <a href="//www.google.com/cse/docs/cref.html" id="c3zc" target="_blank" title="Linked Custom Search">Linked Custom Search</a>.<br /><br />In addition to focusing on ranking, on-demand indexing, customizability, ease of use, <a href="http://googleblog.blogspot.com/2007/11/custom-search-goes-global.html" id="w72c" target="_blank" title="language support">language support</a> and scalability, we've tried to serve your business needs too — <a href="//www.google.com/adsense/afs" id="cs92" target="_blank" title="AdSense for Search">AdSense for Search</a> and <a href="//www.google.com/sitesearch" id="bqum" target="_blank" title="Site Search">Site Search</a> are built on top of the Custom Search platform. These products offer you choice — you can share revenue with Google with <a href="http://googlecustomsearch.blogspot.com/2007/12/ads-now-in-harmony-with-search-results.html" id="uifj" target="_blank" title="topical ads">topical ads</a> or further control presentation and branding options with the use of XML. We've also developed APIs for our <a href="http://code.google.com/apis/customsearch/" id="jlf." target="_blank" title="developers">developers</a> and <a href="http://googleblog.blogspot.com/2009/03/google-at-your-service.html" id="eil4" target="_blank" title="partners">partners</a>.<br /><br />We wanted to celebrate this week, not just with customized cake, but by treating you to something special. Website owners have always asked about more power and more customization of search results, so we're happy to introduce <a href="http://googlecustomsearch.blogspot.com/2009/10/plug-n-play-with-custom-search-themes.html">Custom Search Themes</a>, <a href="http://googlecustomsearch.blogspot.com/2009/10/structured-custom-search.html">Structured Custom Search</a> and the <a href="http://googlecustomsearch.blogspot.com/2009/10/contextual-search-experience-for.html">Custom Search Wikipedia skin</a>. You can read details about these new features right here on the <a href="http://googlecustomsearch.blogspot.com/">Custom Search blog</a>. And, starting today, you can follow us at our new Twitter account <a href="http://www.twitter.com/googlecse" id="azlw" target="_blank" title="@googlecse">@googlecse</a>.<br /><br /><b>Custom Search Themes</b> — Now, with the ultra-configurable <a href="http://googlecustomsearch.blogspot.com/2009/05/introducing-custom-search-web-element.html" id="yhxp" target="_blank" title="Element">Element</a>, you can pick from among a set of convenient layouts and slick styles for your search results. Themes enable well-designed interactive results that you can use <i>instantly</i> on your website and also offer maximum flexibility to further customize every aspect of results presentation. There's also a compact layout for a great <a href="http://googlemobile.blogspot.com/2009/10/google-custom-search-for-mobile.html" id="ormd" target="_blank" title="mobile experience">mobile experience</a> when using an Android-powered phone, iPhone, iPod Touch or Palm Pre. When you create a Custom Search engine, a <i>mobile home page</i> is automatically created for you.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1yF3cFi_PUc4h6sjndQf8kmKDcWAmeVEoZEP8ZweO7iR-d7pj_gD_nHXISrQ6Y3ffymyyb4jAVmH6y0OHefE-IwsjCvAHa1krl6LzOcKUtk5QDXNcKsjLg7h3Fepi4OLsM7qkjjov887i/s1600-h/preview_themes.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5397027054087113698" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1yF3cFi_PUc4h6sjndQf8kmKDcWAmeVEoZEP8ZweO7iR-d7pj_gD_nHXISrQ6Y3ffymyyb4jAVmH6y0OHefE-IwsjCvAHa1krl6LzOcKUtk5QDXNcKsjLg7h3Fepi4OLsM7qkjjov887i/s400/preview_themes.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 213px;" /></a><b>Structured Custom Search</b> — You know your website and data better than anyone. We already return <a href="http://googlecustomsearch.blogspot.com/2009/05/enabling-rich-snippets-in-custom-search.html" id="psta" target="_blank" title="Rich Snippet">Rich Snippet</a> metadata attributes in XML results if you provide structured metadata through markup on your pages. Starting today, special attributes, such as Thumbnails and Actions, will be rendered in Custom Search results. More exciting, you can now restrict your search results by specific attributes, based on the metadata that <i>you</i> provide. Custom metadata attributes and custom query restricts will make your searches truly structured.<div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqe-Bu0aHNEX1Ts65l5Bm59DbaqzROT8CEh_SjUEFGAIkMEvHPAMv80n93Cxm4070foATzagm8ruI0F8fir6zdDP9GcNMfwcLj1txduBEUoGudCuy9ocJAg7SQU6qtY9LacwmR-h1x2Q_s/s1600-h/lighting_single_result.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5397028665136231842" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqe-Bu0aHNEX1Ts65l5Bm59DbaqzROT8CEh_SjUEFGAIkMEvHPAMv80n93Cxm4070foATzagm8ruI0F8fir6zdDP9GcNMfwcLj1txduBEUoGudCuy9ocJAg7SQU6qtY9LacwmR-h1x2Q_s/s400/lighting_single_result.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 88px;" /></a><b>Wikipedia Custom Search Skin</b> — If you use Wikipedia for research, the Custom Search Wikipedia skin provides highly contextual search results when you search within Wikipedia. You get Google search across all Wikipedia articles as well as topical results based on the links on the Wikipedia article you are currently reading. We think this makes for faster research.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0spPuqrdkLdRdqFTg_qNVDLbrphUqPzv-_WcvmFrCrdj3lWzVf8HRv7PxFb5jPwbN0_d7Nv6s17vJygK0xJUEHW5nlXuX6QAHIajxEHOIiJLJVUCgazHsTQS6FMsiIjKEwQyAqgAVgWzf/s1600-h/preview_wikipedia.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5397028033654213842" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0spPuqrdkLdRdqFTg_qNVDLbrphUqPzv-_WcvmFrCrdj3lWzVf8HRv7PxFb5jPwbN0_d7Nv6s17vJygK0xJUEHW5nlXuX6QAHIajxEHOIiJLJVUCgazHsTQS6FMsiIjKEwQyAqgAVgWzf/s400/preview_wikipedia.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 119px;" /></a><br /></div><div>Search is now an <i>expected</i> way to quickly find and navigate information, but there are still many millions of websites out there that don't even have a search box. We hope that these powerful Custom Search tools will help get high-quality search quickly enabled on these websites. After all, you can configure a Custom Search box for your website in minutes!<br /><br /><span class="byline-author">Posted by: Rajat Mukherjee, Group Product Manager and Nicholas Weininger, Software Engineer</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> Last Friday was the third anniversary of Custom Search! Here's a photo of our celebratory cake, baked by John Skidgel, our multitalented Senior Interaction Designer. Our <span class="il">cake</span> was baked in between code reviews for our brand new Look and Feel tab. The magnifying glass was a chocolate <span class="il">cake</span> and the handle and cubes are made from marshmallow and rice cereal squares. Luckily, the local cooking store had ready-made fondant in Google colors. :-)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsR5zGs_4Q9_rcutHzrKVQ2o0hZ7tieZFlB-2NKjToNGryYPBF4U1H9yXEih_LBqsRs0Rd762JeVYXQsx8IJmYn6tOwkn9pSMNvYg1keSN_71LmsUe3_GUMTUuiat9aH9CvsRG3hBapnqv/s1600-h/custom_search_cake.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5397025515713578498" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsR5zGs_4Q9_rcutHzrKVQ2o0hZ7tieZFlB-2NKjToNGryYPBF4U1H9yXEih_LBqsRs0Rd762JeVYXQsx8IJmYn6tOwkn9pSMNvYg1keSN_71LmsUe3_GUMTUuiat9aH9CvsRG3hBapnqv/s400/custom_search_cake.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 264px;" /></a>Thanks to <i>you</i>, our users, the Custom Search platform has grown over the last three years: We now have millions of registered Custom Search engines globally, and are serving many tens of millions of search queries per day. Custom Search, now among the <a href="http://news.ghostery.com/post/134211102/top-10-widgets-on-the-web" id="h0lw" target="_blank" title="top 2">top two</a> widgets on the web, powers websites ranging from the New York Times, MacWorld and Orbitz to individual and topical websites. Since the launch of the <a href="http://googleblog.blogspot.com/2009/06/blog-search-and-beyond.html" id="k:jw" target="_blank" title="Blogger gadget">Blogger gadget</a> a few months back, hundreds of thousands of bloggers use it to help people find information on their sites. Many applications, such as <a href="http://googleblog.blogspot.com/2008/09/adobe-users-get-help-with-google-site.html" id="ek7k" target="_blank" title="Community Help">Community Help</a> within Adobe Creative Suite 4 and topical search on About.com, make use of our unique features, such as label refinements, promotions and <a href="//www.google.com/cse/docs/cref.html" id="c3zc" target="_blank" title="Linked Custom Search">Linked Custom Search</a>.<br /><br />In addition to focusing on ranking, on-demand indexing, customizability, ease of use, <a href="http://googleblog.blogspot.com/2007/11/custom-search-goes-global.html" id="w72c" target="_blank" title="language support">language support</a> and scalability, we've tried to serve your business needs too — <a href="//www.google.com/adsense/afs" id="cs92" target="_blank" title="AdSense for Search">AdSense for Search</a> and <a href="//www.google.com/sitesearch" id="bqum" target="_blank" title="Site Search">Site Search</a> are built on top of the Custom Search platform. These products offer you choice — you can share revenue with Google with <a href="http://googlecustomsearch.blogspot.com/2007/12/ads-now-in-harmony-with-search-results.html" id="uifj" target="_blank" title="topical ads">topical ads</a> or further control presentation and branding options with the use of XML. We've also developed APIs for our <a href="http://code.google.com/apis/customsearch/" id="jlf." target="_blank" title="developers">developers</a> and <a href="http://googleblog.blogspot.com/2009/03/google-at-your-service.html" id="eil4" target="_blank" title="partners">partners</a>.<br /><br />We wanted to celebrate this week, not just with customized cake, but by treating you to something special. Website owners have always asked about more power and more customization of search results, so we're happy to introduce <a href="http://googlecustomsearch.blogspot.com/2009/10/plug-n-play-with-custom-search-themes.html">Custom Search Themes</a>, <a href="http://googlecustomsearch.blogspot.com/2009/10/structured-custom-search.html">Structured Custom Search</a> and the <a href="http://googlecustomsearch.blogspot.com/2009/10/contextual-search-experience-for.html">Custom Search Wikipedia skin</a>. You can read details about these new features right here on the <a href="http://googlecustomsearch.blogspot.com/">Custom Search blog</a>. And, starting today, you can follow us at our new Twitter account <a href="http://www.twitter.com/googlecse" id="azlw" target="_blank" title="@googlecse">@googlecse</a>.<br /><br /><b>Custom Search Themes</b> — Now, with the ultra-configurable <a href="http://googlecustomsearch.blogspot.com/2009/05/introducing-custom-search-web-element.html" id="yhxp" target="_blank" title="Element">Element</a>, you can pick from among a set of convenient layouts and slick styles for your search results. Themes enable well-designed interactive results that you can use <i>instantly</i> on your website and also offer maximum flexibility to further customize every aspect of results presentation. There's also a compact layout for a great <a href="http://googlemobile.blogspot.com/2009/10/google-custom-search-for-mobile.html" id="ormd" target="_blank" title="mobile experience">mobile experience</a> when using an Android-powered phone, iPhone, iPod Touch or Palm Pre. When you create a Custom Search engine, a <i>mobile home page</i> is automatically created for you.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1yF3cFi_PUc4h6sjndQf8kmKDcWAmeVEoZEP8ZweO7iR-d7pj_gD_nHXISrQ6Y3ffymyyb4jAVmH6y0OHefE-IwsjCvAHa1krl6LzOcKUtk5QDXNcKsjLg7h3Fepi4OLsM7qkjjov887i/s1600-h/preview_themes.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5397027054087113698" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1yF3cFi_PUc4h6sjndQf8kmKDcWAmeVEoZEP8ZweO7iR-d7pj_gD_nHXISrQ6Y3ffymyyb4jAVmH6y0OHefE-IwsjCvAHa1krl6LzOcKUtk5QDXNcKsjLg7h3Fepi4OLsM7qkjjov887i/s400/preview_themes.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 213px;" /></a><b>Structured Custom Search</b> — You know your website and data better than anyone. We already return <a href="http://googlecustomsearch.blogspot.com/2009/05/enabling-rich-snippets-in-custom-search.html" id="psta" target="_blank" title="Rich Snippet">Rich Snippet</a> metadata attributes in XML results if you provide structured metadata through markup on your pages. Starting today, special attributes, such as Thumbnails and Actions, will be rendered in Custom Search results. More exciting, you can now restrict your search results by specific attributes, based on the metadata that <i>you</i> provide. Custom metadata attributes and custom query restricts will make your searches truly structured.<div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqe-Bu0aHNEX1Ts65l5Bm59DbaqzROT8CEh_SjUEFGAIkMEvHPAMv80n93Cxm4070foATzagm8ruI0F8fir6zdDP9GcNMfwcLj1txduBEUoGudCuy9ocJAg7SQU6qtY9LacwmR-h1x2Q_s/s1600-h/lighting_single_result.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5397028665136231842" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqe-Bu0aHNEX1Ts65l5Bm59DbaqzROT8CEh_SjUEFGAIkMEvHPAMv80n93Cxm4070foATzagm8ruI0F8fir6zdDP9GcNMfwcLj1txduBEUoGudCuy9ocJAg7SQU6qtY9LacwmR-h1x2Q_s/s400/lighting_single_result.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 88px;" /></a><b>Wikipedia Custom Search Skin</b> — If you use Wikipedia for research, the Custom Search Wikipedia skin provides highly contextual search results when you search within Wikipedia. You get Google search across all Wikipedia articles as well as topical results based on the links on the Wikipedia article you are currently reading. We think this makes for faster research.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0spPuqrdkLdRdqFTg_qNVDLbrphUqPzv-_WcvmFrCrdj3lWzVf8HRv7PxFb5jPwbN0_d7Nv6s17vJygK0xJUEHW5nlXuX6QAHIajxEHOIiJLJVUCgazHsTQS6FMsiIjKEwQyAqgAVgWzf/s1600-h/preview_wikipedia.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5397028033654213842" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0spPuqrdkLdRdqFTg_qNVDLbrphUqPzv-_WcvmFrCrdj3lWzVf8HRv7PxFb5jPwbN0_d7Nv6s17vJygK0xJUEHW5nlXuX6QAHIajxEHOIiJLJVUCgazHsTQS6FMsiIjKEwQyAqgAVgWzf/s400/preview_wikipedia.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 119px;" /></a><br /></div><div>Search is now an <i>expected</i> way to quickly find and navigate information, but there are still many millions of websites out there that don't even have a search box. We hope that these powerful Custom Search tools will help get high-quality search quickly enabled on these websites. After all, you can configure a Custom Search box for your website in minutes!<br /><br /><span class="byline-author">Posted by: Rajat Mukherjee, Group Product Manager and Nicholas Weininger, Software Engineer</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Programmable Search Engine Blog:Three birthday candles for Custom Search&url=https://programmablesearchengine.googleblog.com/2009/10/three-birthday-candles-for-custom-search.html&via=google'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://programmablesearchengine.googleblog.com/2009/10/three-birthday-candles-for-custom-search.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2009/10/three-birthday-candles-for-custom-search.html' data-url='https://programmablesearchengine.googleblog.com/2009/10/three-birthday-candles-for-custom-search.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2009/10/three-birthday-candles-for-custom-search.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='1271399355059019604' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2009/10/plug-n-play-with-custom-search-themes.html' itemprop='url' title='Plug-n-play with Custom Search Themes'> Plug-n-play with Custom Search Themes </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Monday, October 26, 2009 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> Besides great results relevance, one of the most popular features of Custom Search is the ability for you to customize the look and feel of the results to match your website. Our users have always requested <i>more control</i> over results presentation. What's Custom Search without <i>customization</i>?<br /><br />Today, we're launching Custom Search Themes, which make customized presentation a blast!<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikUZnZ65aCqIsP4HQ4CYm539qJp3LWaWzs-men6iXgtuEgQW06vuL928qboCN5fwuss7b-euJDE68zxbdig2ea1kO5ERjoU-7bn4aaMeewudlYN69yKtWRoEs4L9aB8wtyCZeIhdXTjByz/s1600-h/themes.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5396802180671433490" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikUZnZ65aCqIsP4HQ4CYm539qJp3LWaWzs-men6iXgtuEgQW06vuL928qboCN5fwuss7b-euJDE68zxbdig2ea1kO5ERjoU-7bn4aaMeewudlYN69yKtWRoEs4L9aB8wtyCZeIhdXTjByz/s400/themes.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 314px;" /></a>You can now select from among a set of slick styles that make the search results look awesome. If you love a style, but need to tweak it, you can customize it further by changing fonts, colors, backgrounds, promotion settings, as well as interactive features such as tabbing and mouseovers. The preview function shows you the effects of your changes instantaneously - WYSIWYG.<br /><br />You can also select from among a set of convenient layouts for full flexibility on the location of the search box and results - contiguous or in 2 columns - you decide! We've even added a compact layout (with only 4 results) that is useful for websites where space is at a premium and search results will not occupy the whole page. <a href="http://googlemobile.blogspot.com/2009/10/google-custom-search-for-mobile.html" id="kgi:" target="_blank" title="Mobile Custom Search">Mobile Custom Search</a>, launched last week, uses the compact layout for rendering results on high-end mobile devices e.g., Android phones, the iPhone, iPod touch and Palm Pre. We automatically create a Google-hosted <i>home page</i> for every Custom Search engine, so you can <a href="http://googlecustomsearch.blogspot.com/2009/10/google-custom-search-for-your.html" id="su4j" target="_blank" title="redirect mobile visitors">redirect mobile visitors</a> to this page, since we automatically serve up mobile-optimized results.<br /><br />There are several results hosting options. The most flexibility is offered by the <a href="http://googlecustomsearch.blogspot.com/2009/05/introducing-custom-search-web-element.html" id="ngkx" target="_blank" title="Custom Search Element">Element</a>, which renders results inline on a webpage -- your users can quickly review results, narrow results to specific categories with a simple tabbed interface, and dismiss results, all without leaving your webpage. We believe this will make it easier and faster for your website's users to find the information they are looking for. The Element now renders special structured data, e.g., Thumbnails and Actions, that you can provide via <a href="http://googlecustomsearch.blogspot.com/2009/05/enabling-rich-snippets-in-custom-search.html" id="t-eg" target="_blank" title="structured markup">structured markup</a> on the page.<br /><br />With Themes, we're providing great look and feel options for your results <i>out-of-the-box</i>. If you want <i>even more</i> control, you can directly download and manipulate the Cascading Style Sheet (CSS) files that control results styling. You can also refer to the documentation on the <a href="http://code.google.com/apis/ajaxsearch/documentation/customsearch/index.html">AJAX Search API</a> that the Element is built with. Remember - not all customization is pretty, so choose wisely!<br /><br />We'd love to hear <a href="//www.google.com/support/forum/p/customsearch?hl=en" id="oebq" target="_blank" title="your feedback">your feedback</a> about Custom Search Themes. If you build out a great customized theme that you'd like to share with us and other Custom Search users, we'd love to see it.<br /><br /><span class="byline-author">Posted by: Radu Cornea, Software Engineer and John Skidgel, Senior Interaction Designer</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> Besides great results relevance, one of the most popular features of Custom Search is the ability for you to customize the look and feel of the results to match your website. Our users have always requested <i>more control</i> over results presentation. What's Custom Search without <i>customization</i>?<br /><br />Today, we're launching Custom Search Themes, which make customized presentation a blast!<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikUZnZ65aCqIsP4HQ4CYm539qJp3LWaWzs-men6iXgtuEgQW06vuL928qboCN5fwuss7b-euJDE68zxbdig2ea1kO5ERjoU-7bn4aaMeewudlYN69yKtWRoEs4L9aB8wtyCZeIhdXTjByz/s1600-h/themes.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5396802180671433490" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikUZnZ65aCqIsP4HQ4CYm539qJp3LWaWzs-men6iXgtuEgQW06vuL928qboCN5fwuss7b-euJDE68zxbdig2ea1kO5ERjoU-7bn4aaMeewudlYN69yKtWRoEs4L9aB8wtyCZeIhdXTjByz/s400/themes.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 314px;" /></a>You can now select from among a set of slick styles that make the search results look awesome. If you love a style, but need to tweak it, you can customize it further by changing fonts, colors, backgrounds, promotion settings, as well as interactive features such as tabbing and mouseovers. The preview function shows you the effects of your changes instantaneously - WYSIWYG.<br /><br />You can also select from among a set of convenient layouts for full flexibility on the location of the search box and results - contiguous or in 2 columns - you decide! We've even added a compact layout (with only 4 results) that is useful for websites where space is at a premium and search results will not occupy the whole page. <a href="http://googlemobile.blogspot.com/2009/10/google-custom-search-for-mobile.html" id="kgi:" target="_blank" title="Mobile Custom Search">Mobile Custom Search</a>, launched last week, uses the compact layout for rendering results on high-end mobile devices e.g., Android phones, the iPhone, iPod touch and Palm Pre. We automatically create a Google-hosted <i>home page</i> for every Custom Search engine, so you can <a href="http://googlecustomsearch.blogspot.com/2009/10/google-custom-search-for-your.html" id="su4j" target="_blank" title="redirect mobile visitors">redirect mobile visitors</a> to this page, since we automatically serve up mobile-optimized results.<br /><br />There are several results hosting options. The most flexibility is offered by the <a href="http://googlecustomsearch.blogspot.com/2009/05/introducing-custom-search-web-element.html" id="ngkx" target="_blank" title="Custom Search Element">Element</a>, which renders results inline on a webpage -- your users can quickly review results, narrow results to specific categories with a simple tabbed interface, and dismiss results, all without leaving your webpage. We believe this will make it easier and faster for your website's users to find the information they are looking for. The Element now renders special structured data, e.g., Thumbnails and Actions, that you can provide via <a href="http://googlecustomsearch.blogspot.com/2009/05/enabling-rich-snippets-in-custom-search.html" id="t-eg" target="_blank" title="structured markup">structured markup</a> on the page.<br /><br />With Themes, we're providing great look and feel options for your results <i>out-of-the-box</i>. If you want <i>even more</i> control, you can directly download and manipulate the Cascading Style Sheet (CSS) files that control results styling. You can also refer to the documentation on the <a href="http://code.google.com/apis/ajaxsearch/documentation/customsearch/index.html">AJAX Search API</a> that the Element is built with. Remember - not all customization is pretty, so choose wisely!<br /><br />We'd love to hear <a href="//www.google.com/support/forum/p/customsearch?hl=en" id="oebq" target="_blank" title="your feedback">your feedback</a> about Custom Search Themes. If you build out a great customized theme that you'd like to share with us and other Custom Search users, we'd love to see it.<br /><br /><span class="byline-author">Posted by: Radu Cornea, Software Engineer and John Skidgel, Senior Interaction Designer</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Programmable Search Engine Blog:Plug-n-play with Custom Search Themes&url=https://programmablesearchengine.googleblog.com/2009/10/plug-n-play-with-custom-search-themes.html&via=google'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://programmablesearchengine.googleblog.com/2009/10/plug-n-play-with-custom-search-themes.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2009/10/plug-n-play-with-custom-search-themes.html' data-url='https://programmablesearchengine.googleblog.com/2009/10/plug-n-play-with-custom-search-themes.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2009/10/plug-n-play-with-custom-search-themes.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='1572522241678900533' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2009/10/structured-custom-search.html' itemprop='url' title='Structured Custom Search'> Structured Custom Search </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Sunday, October 25, 2009 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> Earlier this year, we announced support for <a href="http://googlecustomsearch.blogspot.com/2009/05/enabling-rich-snippets-in-custom-search.html" id="fubi" target="_blank" title="Rich Snippets">Rich Snippets</a> in Custom Search results. If you provide in-page metadata markup, via RDFa, Microformats, or PageMaps, the Custom Search platform extracts the metadata attributes and returns these as PageMaps in your XML results, so you can render these structured attributes in your search results.<br /><br />Now, our metadata support just got a whole lot better!<br /><br /><b>Thumbnails and Actions</b><br /><br /><div>If you use the Custom Search <a href="http://googlecustomsearch.blogspot.com/2009/05/introducing-custom-search-web-element.html">Element</a>, you can now add publisher-provided links to your search results based on specific metadata markup in your web pages. These special structured data objects, such as Thumbnails and Actions, are generated from the PageMaps you provide. For example, <a href="http://www.scribd.com/">Scribd</a>, one of our partners, provides both Thumbnails and Actions in PageMaps on their pages, so we display both of these in our <a href="http://googlecustomsearch.appspot.com/metadata/">sample Custom Search engine</a>, as shown below. The Actions in this case are "<i>Download</i>" and "<i>Fullscreen View</i>", but each publisher can provide customized actions, which they can also style via CSS.</div><div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5pNMMDUzMelPrDCsvFVlExEkGkJfZC4ZkWlb5hrT-kwX8L27mIaqYv8uW-PmKLKTjSnC8DUW0K9i-rpCL8oSTqI3CMnEZ_g322Jd6OBSvc8aW82_VuzYRdmfYbQRJHt7aHud32kYmUfhQ/s1600-h/halloween_single_result.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5396991416226040658" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5pNMMDUzMelPrDCsvFVlExEkGkJfZC4ZkWlb5hrT-kwX8L27mIaqYv8uW-PmKLKTjSnC8DUW0K9i-rpCL8oSTqI3CMnEZ_g322Jd6OBSvc8aW82_VuzYRdmfYbQRJHt7aHud32kYmUfhQ/s400/halloween_single_result.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 88px;" /></a>In the case of the above document, the PageMap markup for the Thumbnails and Actions is as follows:<br /><pre class="code" style="overflow: scroll;"><br /><PageMap><br /> <DataObject type="thumbnail"><br /> <Attribute name="src" value="http://i5.scribdassets.com/public/images/uploaded/70327880/D9mDLlYzlw_thumbnail.jpeg"/><br /> <Attribute name="width" value="100"/><br /> <Attribute name="height" value="130"/><br /> </DataObject><br /><br /> <DataObject type="action"><br /> <Attribute name="label" value="Download"/><br /> <Attribute name="url" value="http://www.scribd.com/document_downloads/20258723?extension=pdf"/><br /> <Attribute name="class" value="download"/><br /> </DataObject><br /><br /> <DataObject type="action"><br /> <Attribute name="label" value="Fullscreen View"/><br /> <Attribute name="url" value="http://d1.scribdassets.com/ScribdViewer.swf?document_id=20258723&access_key=key-27lwdyi9z21ithon73g3&version=1&viewMode=fullscreen"/><br /> <Attribute name="class" value="fullscreen"/><br /> </DataObject><br /></PageMap><br /></pre>If you markup your own pages, as shown above, the Element will render your Thumbnails and Actions in your own Custom Search engine.<br /><br /><b>Structured Search</b><br /><br />The above example shows how easy it is for you to add valuable metadata to your pages for use in display in Custom Search results. So, in the sample engine that we used above, here's what the result looks like when you type the query [halloween]. We see a set of nicely formatted results that match the query.</div><div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoeKypRG-PSYPGxHjIAp4Wt0p-hV3OW06s3VrhLv8ITX_KtHNLkYFPXsqlr1YPXhWEYhZ0_JDZpib_nn1y3ekPdTkVyCSc7M-OFv1-3A4qqtOL1LqXYZzhBsWklYPnztY-dBbghMjl6MzQ/s1600-h/halloween_icons.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5396991873246979746" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoeKypRG-PSYPGxHjIAp4Wt0p-hV3OW06s3VrhLv8ITX_KtHNLkYFPXsqlr1YPXhWEYhZ0_JDZpib_nn1y3ekPdTkVyCSc7M-OFv1-3A4qqtOL1LqXYZzhBsWklYPnztY-dBbghMjl6MzQ/s400/halloween_icons.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 299px;" /></a>Wouldn't it be <i>nice</i> to use these metadata attributes in your search? We think so too, so we've enabled a way for you to <i>restrict</i> your search results via use of a special operator. Let's say that we wanted to restrict the results to those results that were authored by a specific author, e.g., "<i>lisamorton</i>" (author of the second result above). We can easily do this by adding the following restriction in our search query: [halloween more:pagemap:document-author:lisamorton]. This gives us exactly what we want - documents authored by "<i>lisamorton</i>":<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieNkPGo6NSyS01Wh4sO-Dfq8Zqr-IRuFATZn1at1y_FupEVixQ0Lb0wfIMGK7ASBTEE8G6ZiBs3EPHoxmN7kwV_izCJJwidxGb5oOtCUdyRne2fYae0cUMjiMzL-Xz0SclzIswRXfylGMJ/s1600-h/halloween_more_icons.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5396992414160930962" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieNkPGo6NSyS01Wh4sO-Dfq8Zqr-IRuFATZn1at1y_FupEVixQ0Lb0wfIMGK7ASBTEE8G6ZiBs3EPHoxmN7kwV_izCJJwidxGb5oOtCUdyRne2fYae0cUMjiMzL-Xz0SclzIswRXfylGMJ/s400/halloween_more_icons.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 243px;" /></a>Let's break down the <b>more:pagemap:document-author:lisamorton</b> restriction. The <b>more: </b>operator is what we use for refinement labels. The <b>pagemap: </b>tells us to refine results by specific attributes in the indexed PageMaps. The <b>document-author: </b>qualifier tells us to look for the specific attribute of interest - the <b>document</b> DataObject in the PageMap with child attribute called <b>author. </b>This is followed by <b>lisamorton</b>, which is just the actual value that we are using for the restriction. You can use this open-ended syntax for querying the appropriate DataObjects in your own documents.<br /><br />The PageMap that represents the document and author information in the markup of the above pages is as follows:<br /><pre class="code" style="overflow: scroll;"><br /><PageMap><br /> <DataObject type="document"><br /> <Attribute name="title">The Five Scariest Traditional Halloween Stories</Attribute><br /> <Attribute name="author">lisamorton</Attribute><br /> </DataObject><br /></PageMap><br /></pre>You can provide hooks in your application to filter results by attributes that are important for your users, so users will not have to type these restriction qualifiers directly.<br /><br /><b>Rich Snippet Preview Tool</b><br /><br />Check out the <a href="http://googlewebmastercentral.blogspot.com/2009/10/help-us-make-web-better-update-on-rich.html">Rich Snippet preview tool</a>. This tool allows you to view not only the Rich Snippets markup recognized for Google <a href="//www.google.com/webmasters/tools/richsnippets">web search</a>, but also the <a href="//www.google.com/webmasters/tools/richsnippets?view=cse&url=http://www.scribd.com/doc/20978665/The-Five-Scariest-Traditional-Halloween-Stories&view=cse" id="xp08" target="_blank" title="additional customized markup">additional customized markup</a> that we support in Custom Search. You can immediately see how your web page will be processed after indexing, and what metadata attributes will be returned in PageMaps in your Custom Search results. If there are any errors in your markup, you can fix them right away! Remember - you need to add the <b>&view=cse</b> parameter to this tool to review the additional metadata extracted by Custom Search.<br /><br />Here's a screenshot from the tool for one of the above results, showing all the PageMap markup recognized by Custom Search:<div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBWRjct4FXhMqd2lXrYqyIw9cepQdWd2FYmlaTQ_abF_xWg00A-qdqbM_jVdEvCsgdfscXXTXOHrb474f9ebVvbrPH9045i2Wo2BUTBRXAeOUqrtpUsA49nXVIJVQnUwBh54nSqOGOEdFU/s1600-h/rich_snippet_preview.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5396798055473582738" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBWRjct4FXhMqd2lXrYqyIw9cepQdWd2FYmlaTQ_abF_xWg00A-qdqbM_jVdEvCsgdfscXXTXOHrb474f9ebVvbrPH9045i2Wo2BUTBRXAeOUqrtpUsA49nXVIJVQnUwBh54nSqOGOEdFU/s400/rich_snippet_preview.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 242px;" /></a>Many customers have asked for additional structured capabilities, richer snippet presentation and filtering and drill-down capabilities in Custom Search. We'd love to hear <a href="//www.google.com/support/forum/p/customsearch?hl=en" id="zl0c" target="_blank" title="feedback">feedback</a> from you on these structured data features that offer you more power and flexibility to help users find what they are looking for on your site.<br /><br /><span class="byline-author">Posted by: Anthony Francis and David Gibson, Software Engineers</span></div></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> Earlier this year, we announced support for <a href="http://googlecustomsearch.blogspot.com/2009/05/enabling-rich-snippets-in-custom-search.html" id="fubi" target="_blank" title="Rich Snippets">Rich Snippets</a> in Custom Search results. If you provide in-page metadata markup, via RDFa, Microformats, or PageMaps, the Custom Search platform extracts the metadata attributes and returns these as PageMaps in your XML results, so you can render these structured attributes in your search results.<br /><br />Now, our metadata support just got a whole lot better!<br /><br /><b>Thumbnails and Actions</b><br /><br /><div>If you use the Custom Search <a href="http://googlecustomsearch.blogspot.com/2009/05/introducing-custom-search-web-element.html">Element</a>, you can now add publisher-provided links to your search results based on specific metadata markup in your web pages. These special structured data objects, such as Thumbnails and Actions, are generated from the PageMaps you provide. For example, <a href="http://www.scribd.com/">Scribd</a>, one of our partners, provides both Thumbnails and Actions in PageMaps on their pages, so we display both of these in our <a href="http://googlecustomsearch.appspot.com/metadata/">sample Custom Search engine</a>, as shown below. The Actions in this case are "<i>Download</i>" and "<i>Fullscreen View</i>", but each publisher can provide customized actions, which they can also style via CSS.</div><div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5pNMMDUzMelPrDCsvFVlExEkGkJfZC4ZkWlb5hrT-kwX8L27mIaqYv8uW-PmKLKTjSnC8DUW0K9i-rpCL8oSTqI3CMnEZ_g322Jd6OBSvc8aW82_VuzYRdmfYbQRJHt7aHud32kYmUfhQ/s1600-h/halloween_single_result.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5396991416226040658" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5pNMMDUzMelPrDCsvFVlExEkGkJfZC4ZkWlb5hrT-kwX8L27mIaqYv8uW-PmKLKTjSnC8DUW0K9i-rpCL8oSTqI3CMnEZ_g322Jd6OBSvc8aW82_VuzYRdmfYbQRJHt7aHud32kYmUfhQ/s400/halloween_single_result.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 88px;" /></a>In the case of the above document, the PageMap markup for the Thumbnails and Actions is as follows:<br /><pre class="code" style="overflow: scroll;"><br /><PageMap><br /> <DataObject type="thumbnail"><br /> <Attribute name="src" value="http://i5.scribdassets.com/public/images/uploaded/70327880/D9mDLlYzlw_thumbnail.jpeg"/><br /> <Attribute name="width" value="100"/><br /> <Attribute name="height" value="130"/><br /> </DataObject><br /><br /> <DataObject type="action"><br /> <Attribute name="label" value="Download"/><br /> <Attribute name="url" value="http://www.scribd.com/document_downloads/20258723?extension=pdf"/><br /> <Attribute name="class" value="download"/><br /> </DataObject><br /><br /> <DataObject type="action"><br /> <Attribute name="label" value="Fullscreen View"/><br /> <Attribute name="url" value="http://d1.scribdassets.com/ScribdViewer.swf?document_id=20258723&access_key=key-27lwdyi9z21ithon73g3&version=1&viewMode=fullscreen"/><br /> <Attribute name="class" value="fullscreen"/><br /> </DataObject><br /></PageMap><br /></pre>If you markup your own pages, as shown above, the Element will render your Thumbnails and Actions in your own Custom Search engine.<br /><br /><b>Structured Search</b><br /><br />The above example shows how easy it is for you to add valuable metadata to your pages for use in display in Custom Search results. So, in the sample engine that we used above, here's what the result looks like when you type the query [halloween]. We see a set of nicely formatted results that match the query.</div><div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoeKypRG-PSYPGxHjIAp4Wt0p-hV3OW06s3VrhLv8ITX_KtHNLkYFPXsqlr1YPXhWEYhZ0_JDZpib_nn1y3ekPdTkVyCSc7M-OFv1-3A4qqtOL1LqXYZzhBsWklYPnztY-dBbghMjl6MzQ/s1600-h/halloween_icons.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5396991873246979746" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoeKypRG-PSYPGxHjIAp4Wt0p-hV3OW06s3VrhLv8ITX_KtHNLkYFPXsqlr1YPXhWEYhZ0_JDZpib_nn1y3ekPdTkVyCSc7M-OFv1-3A4qqtOL1LqXYZzhBsWklYPnztY-dBbghMjl6MzQ/s400/halloween_icons.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 299px;" /></a>Wouldn't it be <i>nice</i> to use these metadata attributes in your search? We think so too, so we've enabled a way for you to <i>restrict</i> your search results via use of a special operator. Let's say that we wanted to restrict the results to those results that were authored by a specific author, e.g., "<i>lisamorton</i>" (author of the second result above). We can easily do this by adding the following restriction in our search query: [halloween more:pagemap:document-author:lisamorton]. This gives us exactly what we want - documents authored by "<i>lisamorton</i>":<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieNkPGo6NSyS01Wh4sO-Dfq8Zqr-IRuFATZn1at1y_FupEVixQ0Lb0wfIMGK7ASBTEE8G6ZiBs3EPHoxmN7kwV_izCJJwidxGb5oOtCUdyRne2fYae0cUMjiMzL-Xz0SclzIswRXfylGMJ/s1600-h/halloween_more_icons.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5396992414160930962" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieNkPGo6NSyS01Wh4sO-Dfq8Zqr-IRuFATZn1at1y_FupEVixQ0Lb0wfIMGK7ASBTEE8G6ZiBs3EPHoxmN7kwV_izCJJwidxGb5oOtCUdyRne2fYae0cUMjiMzL-Xz0SclzIswRXfylGMJ/s400/halloween_more_icons.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 243px;" /></a>Let's break down the <b>more:pagemap:document-author:lisamorton</b> restriction. The <b>more: </b>operator is what we use for refinement labels. The <b>pagemap: </b>tells us to refine results by specific attributes in the indexed PageMaps. The <b>document-author: </b>qualifier tells us to look for the specific attribute of interest - the <b>document</b> DataObject in the PageMap with child attribute called <b>author. </b>This is followed by <b>lisamorton</b>, which is just the actual value that we are using for the restriction. You can use this open-ended syntax for querying the appropriate DataObjects in your own documents.<br /><br />The PageMap that represents the document and author information in the markup of the above pages is as follows:<br /><pre class="code" style="overflow: scroll;"><br /><PageMap><br /> <DataObject type="document"><br /> <Attribute name="title">The Five Scariest Traditional Halloween Stories</Attribute><br /> <Attribute name="author">lisamorton</Attribute><br /> </DataObject><br /></PageMap><br /></pre>You can provide hooks in your application to filter results by attributes that are important for your users, so users will not have to type these restriction qualifiers directly.<br /><br /><b>Rich Snippet Preview Tool</b><br /><br />Check out the <a href="http://googlewebmastercentral.blogspot.com/2009/10/help-us-make-web-better-update-on-rich.html">Rich Snippet preview tool</a>. This tool allows you to view not only the Rich Snippets markup recognized for Google <a href="//www.google.com/webmasters/tools/richsnippets">web search</a>, but also the <a href="//www.google.com/webmasters/tools/richsnippets?view=cse&url=http://www.scribd.com/doc/20978665/The-Five-Scariest-Traditional-Halloween-Stories&view=cse" id="xp08" target="_blank" title="additional customized markup">additional customized markup</a> that we support in Custom Search. You can immediately see how your web page will be processed after indexing, and what metadata attributes will be returned in PageMaps in your Custom Search results. If there are any errors in your markup, you can fix them right away! Remember - you need to add the <b>&view=cse</b> parameter to this tool to review the additional metadata extracted by Custom Search.<br /><br />Here's a screenshot from the tool for one of the above results, showing all the PageMap markup recognized by Custom Search:<div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBWRjct4FXhMqd2lXrYqyIw9cepQdWd2FYmlaTQ_abF_xWg00A-qdqbM_jVdEvCsgdfscXXTXOHrb474f9ebVvbrPH9045i2Wo2BUTBRXAeOUqrtpUsA49nXVIJVQnUwBh54nSqOGOEdFU/s1600-h/rich_snippet_preview.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5396798055473582738" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBWRjct4FXhMqd2lXrYqyIw9cepQdWd2FYmlaTQ_abF_xWg00A-qdqbM_jVdEvCsgdfscXXTXOHrb474f9ebVvbrPH9045i2Wo2BUTBRXAeOUqrtpUsA49nXVIJVQnUwBh54nSqOGOEdFU/s400/rich_snippet_preview.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 242px;" /></a>Many customers have asked for additional structured capabilities, richer snippet presentation and filtering and drill-down capabilities in Custom Search. We'd love to hear <a href="//www.google.com/support/forum/p/customsearch?hl=en" id="zl0c" target="_blank" title="feedback">feedback</a> from you on these structured data features that offer you more power and flexibility to help users find what they are looking for on your site.<br /><br /><span class="byline-author">Posted by: Anthony Francis and David Gibson, Software Engineers</span></div></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Programmable Search Engine Blog:Structured Custom Search&url=https://programmablesearchengine.googleblog.com/2009/10/structured-custom-search.html&via=google'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://programmablesearchengine.googleblog.com/2009/10/structured-custom-search.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2009/10/structured-custom-search.html' data-url='https://programmablesearchengine.googleblog.com/2009/10/structured-custom-search.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2009/10/structured-custom-search.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='3834867322212472828' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2009/10/a-contextual-search-experience-for.html' itemprop='url' title='A contextual search experience for Wikipedia'> A contextual search experience for Wikipedia </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Sunday, October 25, 2009 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> Wikipedia users can now configure a <a href="http://en.wikipedia.org/wiki/Wikipedia:Google_Custom_Search">Custom Search skin</a> to customize their Wikipedia search experience. Once configured, the skin helps you to search Wikipedia, and for contextually relevant articles, from any Wikipedia page. This can make it easier to find relevant information, especially on Wikipedia pages with many links, and where the topics you are researching are ambiguous. You can find instructions to configure the Custom Search skin at <a href="http://en.wikipedia.org/wiki/Wikipedia:Google_Custom_Search">Wikipedia</a>. It works with Wikipedia's Monobook and the <a href="http://en.wikipedia.org/w/index.php?title=Special:UsabilityInitiativeOptIn" id="wq1m" target="_blank" title="Beta">Beta</a> Vector skins, and should work on Wikipedia domains globally. Remember that you need a user account and must <a href="http://en.wikipedia.org/w/index.php?title=Special:UserLogin" id="jgdx" target="_blank" title="login">log in</a> to Wikipedia to use it.<br /><br />With the skin configured, if you are reading the Wikipedia page on <a href="http://en.wikipedia.org/wiki/NASA" id="xb4." target="_blank" title="NASA">NASA</a>, and do a search for the query [<i>mars</i>], you are presented inline results organized into 3 tabbed groups: <b>All Wikipedia pages</b>, <b>Linked Wikipedia pages</b>, and <b>Linked non-Wikipedia pages</b>. The first tab shows all Wikipedia articles that match, including those about the candy (<i>Mars Bars</i>) and the television series (<i>Veronica Mars</i>). The next 2 tabs provide contextually relevant results that are <i>linked</i> from the NASA page, such as information about various Mars rovers, orbiters, and space labs, as shown in the screenshot.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCIvhoarYjXCp4sx_phu9wQJhS8sG72AbwwDwzRSLVPtwBdI12UFs48HXOE7MvkpTtIMOcOuaqo9WfebsoLRCkdqgnXhcDLhnIu2De-sqaiSU751ZYVbXGSbChw5nyPmng3ZCQ8nfXzwlz/s1600-h/NASA_new_screen.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5396777790713410674" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCIvhoarYjXCp4sx_phu9wQJhS8sG72AbwwDwzRSLVPtwBdI12UFs48HXOE7MvkpTtIMOcOuaqo9WfebsoLRCkdqgnXhcDLhnIu2De-sqaiSU751ZYVbXGSbChw5nyPmng3ZCQ8nfXzwlz/s400/NASA_new_screen.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 269px;" /></a><br /><br /><b>Here's what's going on under the covers:</b><div><b><br /></b><a href="//www.google.com/cse/docs/cref.html" id="r97q" target="_blank" title="Linked Custom Search">Linked Custom Search</a> enables the creation of dynamic search experiences, where the content being searched can be defined on the fly, and can change over time as new information becomes relevant. The Custom Search skin creates a Linked Custom Search engine on demand for <i>every</i> Wikipedia page that you navigate to.<br /><br />The results from the current Wikipedia domain, as well as the results from the per-page dynamic search engine, are presented inline in tabbed categories via the <a href="http://code.google.com/apis/ajaxsearch/documentation/customsearch/index.html" id="uiny" target="_blank" title="AJAX search API">AJAX search API</a>. You can refine results by the category of choice, and quickly review the results without having to open a new browser window or tab. This happens through the <a href="http://en.wikipedia.org/wiki/User:Csewiki/vector.js" id="x8sw" target="_blank" title="Javascript">Javascript</a> code in the skin. The skin's <a href="http://en.wikipedia.org/wiki/User:Csewiki/vector.css" id="zs40" target="_blank" title="CSS">CSS</a> defines the look and feel of the results.<br /><br />As for the page-specific Linked Custom Search engine, it computes the contextual results within the <b>Linked Wikipedia pages</b> (on-domain) and <b>Linked non-Wikipedia pages</b>(off-domain) categories. These two tabs are technically very similar, so we'll just describe how one of them works.<br /><br />Suppose you're visiting the NASA article and search for [mars]. The Linked Wikipedia tab sends the search query to Google Custom Search, along with a parameter that indicates that the search engine specification is at (<span style="font-style: italic;">view source in browser</span>):<div><br /><div style="margin-left: 40px;"><a href="http://googlecustomsearch.appspot.com/wikipedia/spec.do?url=en.wikipedia.org%2Fwiki%2FNASA" id="qgcx" target="_blank" title="http://googlecustomsearch.appspot.com/wikipedia/spec.do?url=en.wikipedia.org%2Fwiki%2FDNA">http://googlecustomsearch.appspot.com/wikipedia/spec.do?url=en.wikipedia.org/wiki/NASA</a><br /></div><br />Google picks up this <a href="//www.google.com/cse/docs/cref.html" id="l56o" target="_blank" title="Linked CSE">Linked CSE</a> request and uses the above specification and the supplied query. You can simulate this process by visiting:<div><br /><div style="margin-left: 40px;"><a href="//www.google.com/cse?cref=http://googlecustomsearch.appspot.com/wikipedia/spec.do?url%3Den.wikipedia.org/wiki/NASA&q=mars" id="kujp" target="_blank" title="http://www.google.com/cse?cref=http://googlecustomsearch.appspot.com/wikipedia/spec.do?url=en.wikipedia.org/wiki/NASA&q=mars">http://www.google.com/cse?cref=http://googlecustomsearch.appspot.com/wikipedia/spec.do?url=en.wikipedia.org/wiki/NASA&q=mars</a></div><br />A different specification is generated for every Wikipedia page (based on <span style="font-family:Courier New;">url</span>) by a tiny <a href="http://appengine.google.com/" id="o:es" target="_blank" title="AppEngine">AppEngine</a> application at <a href="http://googlecustomsearch.appspot.com/" id="r_82" target="_blank" title="http://googlecustomsearch.appspot.com">http://googlecustomsearch.appspot.com</a>. The specification defines a search engine with two facets, labeled "internal" (<b>Linked Wikipedia pages</b>) and "external" (<b>Linked non-Wikipedia pages</b>). The list of "internal" (and "external") webpages to search over is provided by this line in the specification:<br /><span class="Apple-style-span" style="font-family:'Courier New';"><span class="Apple-style-span" style="font-family:Georgia,serif;"><br /></span></span><div style="margin-left: 40px;"><span style="font-family:Courier New;"><Include href="http://googlecustomsearch.appspot.com/wikipedia/annotations.do?url=en.wikipedia.org%2Fwiki%2FNASA" type="Annotations"/></span></div><br />This causes Google to visit the webapp at a new URL (<span style="font-family:Courier New;">annotations.do</span>). Our webapp now collects links from the NASA article, classifies them as "internal" or "external", and returns the annotations in an XML format. You can see the result at (<span style="font-style: italic;">view source in browser</span>)<br /><br /><div style="margin-left: 40px;"><a href="http://googlecustomsearch.appspot.com/wikipedia/annotations.do?url=en.wikipedia.org%2Fwiki%2FNASA" id="nla-" target="_blank" title="http://googlecustomsearch.appspot.com/wikipedia/annotations.do?url=en.wikipedia.org%2Fwiki%2FDNA">http://googlecustomsearch.appspot.com/wikipedia/annotations.do?url=en.wikipedia.org%2Fwiki%2FNASA</a></div><br />Now Google can finish building the Custom Search engine for the NASA article, and compute the results for [mars]. The results are returned to your web browser and displayed in the appropriate tab.<br /><br />But wait! Our little AppEngine webapp doesn't have the CPU horsepower or bandwidth to scan Wikipedia pages on-demand or in nearly-real-time for thousands of Wikipedia users. Instead, the webapp asks Google to scan the page, via a Custom Search tool called <a href="//www.google.com/cse/docs/tools.html#makeannotations" id="aa21" target="_blank" title="makeannotations"><span style="font-family:Courier New;">makeannotations</span></a>. The request looks something like this:<br /><br /><div style="margin-left: 40px;"><a href="//google.com/cse/tools/makeannotations?url=en.wikipedia.org/wiki/NASA&label=myLabel" id="fcuk" target="_blank" title="http://google.com/cse/tools/makeannotations?url=en.wikipedia.org%2Fwiki%2FDNA&label=myLabel">http://google.com/cse/tools/makeannotations?url=en.wikipedia.org%2Fwiki%2FNASA&label=myLabel</a></div><br />After <span style="font-family:Courier New;">makeannotations</span> returns the list of links in the NASA article in XML, the webapp simply rewrites the XML according to the domain of each link.<br /><br />Since we are creating the per-page search engines on demand, there can sometimes be a short delay in the creation of the search engine, e.g., for new or obscure pages. However, for popular Wikipedia pages, these definitions should be cached, and you should see no delays. In fact, we use a <i>ping</i> method to load up the Custom Search engine in advance before you search. Remember that if there are not many links on the Wikipedia page you are searching from, you may sometimes find no matches for linked pages.<br /><br />We've <a href="http://code.google.com/p/cse-cref-domain-filter/" id="p-d." target="_blank" title="open sourced">open sourced</a> the code for this application. Feel free to work with it. Feel free to extend the skin beyond Monobook and Vector. We built this skin with the help of <a href="http://blog.wikimedia.org/2009/10/26/google-experiments-with-new-ways-to-search-wikipedia/">Wikipedia</a>, and hope that you will provide <a href="//www.google.com/support/forum/p/customsearch?hl=en" id="xft6" target="_blank" title="feedback to us">feedback</a> on your experience. You can also provide your feedback directly to <a href="http://en.wikipedia.org/wiki/Wikipedia_talk:Google_Custom_Search#Google_Custom_search_gadget">Wikipedia</a>.<br /><br /><span class="byline-author">Posted by: Paul Komarek, Software Engineer and Jeffrey Scudder, Developer Programs Engineer</span></div></div></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> Wikipedia users can now configure a <a href="http://en.wikipedia.org/wiki/Wikipedia:Google_Custom_Search">Custom Search skin</a> to customize their Wikipedia search experience. Once configured, the skin helps you to search Wikipedia, and for contextually relevant articles, from any Wikipedia page. This can make it easier to find relevant information, especially on Wikipedia pages with many links, and where the topics you are researching are ambiguous. You can find instructions to configure the Custom Search skin at <a href="http://en.wikipedia.org/wiki/Wikipedia:Google_Custom_Search">Wikipedia</a>. It works with Wikipedia's Monobook and the <a href="http://en.wikipedia.org/w/index.php?title=Special:UsabilityInitiativeOptIn" id="wq1m" target="_blank" title="Beta">Beta</a> Vector skins, and should work on Wikipedia domains globally. Remember that you need a user account and must <a href="http://en.wikipedia.org/w/index.php?title=Special:UserLogin" id="jgdx" target="_blank" title="login">log in</a> to Wikipedia to use it.<br /><br />With the skin configured, if you are reading the Wikipedia page on <a href="http://en.wikipedia.org/wiki/NASA" id="xb4." target="_blank" title="NASA">NASA</a>, and do a search for the query [<i>mars</i>], you are presented inline results organized into 3 tabbed groups: <b>All Wikipedia pages</b>, <b>Linked Wikipedia pages</b>, and <b>Linked non-Wikipedia pages</b>. The first tab shows all Wikipedia articles that match, including those about the candy (<i>Mars Bars</i>) and the television series (<i>Veronica Mars</i>). The next 2 tabs provide contextually relevant results that are <i>linked</i> from the NASA page, such as information about various Mars rovers, orbiters, and space labs, as shown in the screenshot.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCIvhoarYjXCp4sx_phu9wQJhS8sG72AbwwDwzRSLVPtwBdI12UFs48HXOE7MvkpTtIMOcOuaqo9WfebsoLRCkdqgnXhcDLhnIu2De-sqaiSU751ZYVbXGSbChw5nyPmng3ZCQ8nfXzwlz/s1600-h/NASA_new_screen.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5396777790713410674" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCIvhoarYjXCp4sx_phu9wQJhS8sG72AbwwDwzRSLVPtwBdI12UFs48HXOE7MvkpTtIMOcOuaqo9WfebsoLRCkdqgnXhcDLhnIu2De-sqaiSU751ZYVbXGSbChw5nyPmng3ZCQ8nfXzwlz/s400/NASA_new_screen.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 269px;" /></a><br /><br /><b>Here's what's going on under the covers:</b><div><b><br /></b><a href="//www.google.com/cse/docs/cref.html" id="r97q" target="_blank" title="Linked Custom Search">Linked Custom Search</a> enables the creation of dynamic search experiences, where the content being searched can be defined on the fly, and can change over time as new information becomes relevant. The Custom Search skin creates a Linked Custom Search engine on demand for <i>every</i> Wikipedia page that you navigate to.<br /><br />The results from the current Wikipedia domain, as well as the results from the per-page dynamic search engine, are presented inline in tabbed categories via the <a href="http://code.google.com/apis/ajaxsearch/documentation/customsearch/index.html" id="uiny" target="_blank" title="AJAX search API">AJAX search API</a>. You can refine results by the category of choice, and quickly review the results without having to open a new browser window or tab. This happens through the <a href="http://en.wikipedia.org/wiki/User:Csewiki/vector.js" id="x8sw" target="_blank" title="Javascript">Javascript</a> code in the skin. The skin's <a href="http://en.wikipedia.org/wiki/User:Csewiki/vector.css" id="zs40" target="_blank" title="CSS">CSS</a> defines the look and feel of the results.<br /><br />As for the page-specific Linked Custom Search engine, it computes the contextual results within the <b>Linked Wikipedia pages</b> (on-domain) and <b>Linked non-Wikipedia pages</b>(off-domain) categories. These two tabs are technically very similar, so we'll just describe how one of them works.<br /><br />Suppose you're visiting the NASA article and search for [mars]. The Linked Wikipedia tab sends the search query to Google Custom Search, along with a parameter that indicates that the search engine specification is at (<span style="font-style: italic;">view source in browser</span>):<div><br /><div style="margin-left: 40px;"><a href="http://googlecustomsearch.appspot.com/wikipedia/spec.do?url=en.wikipedia.org%2Fwiki%2FNASA" id="qgcx" target="_blank" title="http://googlecustomsearch.appspot.com/wikipedia/spec.do?url=en.wikipedia.org%2Fwiki%2FDNA">http://googlecustomsearch.appspot.com/wikipedia/spec.do?url=en.wikipedia.org/wiki/NASA</a><br /></div><br />Google picks up this <a href="//www.google.com/cse/docs/cref.html" id="l56o" target="_blank" title="Linked CSE">Linked CSE</a> request and uses the above specification and the supplied query. You can simulate this process by visiting:<div><br /><div style="margin-left: 40px;"><a href="//www.google.com/cse?cref=http://googlecustomsearch.appspot.com/wikipedia/spec.do?url%3Den.wikipedia.org/wiki/NASA&q=mars" id="kujp" target="_blank" title="http://www.google.com/cse?cref=http://googlecustomsearch.appspot.com/wikipedia/spec.do?url=en.wikipedia.org/wiki/NASA&q=mars">http://www.google.com/cse?cref=http://googlecustomsearch.appspot.com/wikipedia/spec.do?url=en.wikipedia.org/wiki/NASA&q=mars</a></div><br />A different specification is generated for every Wikipedia page (based on <span style="font-family:Courier New;">url</span>) by a tiny <a href="http://appengine.google.com/" id="o:es" target="_blank" title="AppEngine">AppEngine</a> application at <a href="http://googlecustomsearch.appspot.com/" id="r_82" target="_blank" title="http://googlecustomsearch.appspot.com">http://googlecustomsearch.appspot.com</a>. The specification defines a search engine with two facets, labeled "internal" (<b>Linked Wikipedia pages</b>) and "external" (<b>Linked non-Wikipedia pages</b>). The list of "internal" (and "external") webpages to search over is provided by this line in the specification:<br /><span class="Apple-style-span" style="font-family:'Courier New';"><span class="Apple-style-span" style="font-family:Georgia,serif;"><br /></span></span><div style="margin-left: 40px;"><span style="font-family:Courier New;"><Include href="http://googlecustomsearch.appspot.com/wikipedia/annotations.do?url=en.wikipedia.org%2Fwiki%2FNASA" type="Annotations"/></span></div><br />This causes Google to visit the webapp at a new URL (<span style="font-family:Courier New;">annotations.do</span>). Our webapp now collects links from the NASA article, classifies them as "internal" or "external", and returns the annotations in an XML format. You can see the result at (<span style="font-style: italic;">view source in browser</span>)<br /><br /><div style="margin-left: 40px;"><a href="http://googlecustomsearch.appspot.com/wikipedia/annotations.do?url=en.wikipedia.org%2Fwiki%2FNASA" id="nla-" target="_blank" title="http://googlecustomsearch.appspot.com/wikipedia/annotations.do?url=en.wikipedia.org%2Fwiki%2FDNA">http://googlecustomsearch.appspot.com/wikipedia/annotations.do?url=en.wikipedia.org%2Fwiki%2FNASA</a></div><br />Now Google can finish building the Custom Search engine for the NASA article, and compute the results for [mars]. The results are returned to your web browser and displayed in the appropriate tab.<br /><br />But wait! Our little AppEngine webapp doesn't have the CPU horsepower or bandwidth to scan Wikipedia pages on-demand or in nearly-real-time for thousands of Wikipedia users. Instead, the webapp asks Google to scan the page, via a Custom Search tool called <a href="//www.google.com/cse/docs/tools.html#makeannotations" id="aa21" target="_blank" title="makeannotations"><span style="font-family:Courier New;">makeannotations</span></a>. The request looks something like this:<br /><br /><div style="margin-left: 40px;"><a href="//google.com/cse/tools/makeannotations?url=en.wikipedia.org/wiki/NASA&label=myLabel" id="fcuk" target="_blank" title="http://google.com/cse/tools/makeannotations?url=en.wikipedia.org%2Fwiki%2FDNA&label=myLabel">http://google.com/cse/tools/makeannotations?url=en.wikipedia.org%2Fwiki%2FNASA&label=myLabel</a></div><br />After <span style="font-family:Courier New;">makeannotations</span> returns the list of links in the NASA article in XML, the webapp simply rewrites the XML according to the domain of each link.<br /><br />Since we are creating the per-page search engines on demand, there can sometimes be a short delay in the creation of the search engine, e.g., for new or obscure pages. However, for popular Wikipedia pages, these definitions should be cached, and you should see no delays. In fact, we use a <i>ping</i> method to load up the Custom Search engine in advance before you search. Remember that if there are not many links on the Wikipedia page you are searching from, you may sometimes find no matches for linked pages.<br /><br />We've <a href="http://code.google.com/p/cse-cref-domain-filter/" id="p-d." target="_blank" title="open sourced">open sourced</a> the code for this application. Feel free to work with it. Feel free to extend the skin beyond Monobook and Vector. We built this skin with the help of <a href="http://blog.wikimedia.org/2009/10/26/google-experiments-with-new-ways-to-search-wikipedia/">Wikipedia</a>, and hope that you will provide <a href="//www.google.com/support/forum/p/customsearch?hl=en" id="xft6" target="_blank" title="feedback to us">feedback</a> on your experience. You can also provide your feedback directly to <a href="http://en.wikipedia.org/wiki/Wikipedia_talk:Google_Custom_Search#Google_Custom_search_gadget">Wikipedia</a>.<br /><br /><span class="byline-author">Posted by: Paul Komarek, Software Engineer and Jeffrey Scudder, Developer Programs Engineer</span></div></div></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Programmable Search Engine Blog:A contextual search experience for Wikipedia&url=https://programmablesearchengine.googleblog.com/2009/10/a-contextual-search-experience-for.html&via=google'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://programmablesearchengine.googleblog.com/2009/10/a-contextual-search-experience-for.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2009/10/a-contextual-search-experience-for.html' data-url='https://programmablesearchengine.googleblog.com/2009/10/a-contextual-search-experience-for.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2009/10/a-contextual-search-experience-for.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='6974269003950271699' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2009/10/google-custom-search-for-your-smartphone.html' itemprop='url' title='Google Custom Search for your smartphone'> Google Custom Search for your smartphone </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, October 22, 2009 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> In our recent Product Ideas <a href="http://productideas.appspot.com/#25/e=21999" id="b6ob" target="_blank" title="survey">survey</a>, one of the most-requested features was about enabling a mobile version of Custom Search. Guess what: It's here! As announced on the <a href="http://googlemobile.blogspot.com/2009/10/google-custom-search-for-mobile.html">Google Mobile blog</a>, Custom Search now enables a rich interactive mobile experience on high-end devices such as Android-powered phones, iPhone, iPod touch, and Palm Pre.<br /><br />Try it out on your phone right now: <a href="http://googlecustomsearch.appspot.com/social/" id="d8yq" target="_blank" title="user-generated content">search for user-generated content</a> (e.g., search for [maradona]) from sites like Wikipedia, Knol, etc., or learn all about the latest and greatest Custom Search features on our product's <a href="http://googlecustomsearch.appspot.com/cse/" id="jjza" target="_blank" title="mobile search engine">mobile search engine</a> (e.g., search for [snippets]).<div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxPApBPCCeXgkDGaaU7L-Nfwgeu-o7pBgC5_q3ZbH789AZGluklwscjOoeSi8Kzk0TCyZLY8bkGp1G7dflrXktQGDWZKKC__rhvLkzPEizGKx7QV1Avb0ILjeG-pcvupMayQL67qVFDH00/s1600-h/iphone_cse.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5395555434086659458" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxPApBPCCeXgkDGaaU7L-Nfwgeu-o7pBgC5_q3ZbH789AZGluklwscjOoeSi8Kzk0TCyZLY8bkGp1G7dflrXktQGDWZKKC__rhvLkzPEizGKx7QV1Avb0ILjeG-pcvupMayQL67qVFDH00/s320/iphone_cse.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 205px; height: 320px;" /></a>Custom Search engine results can be embedded in your own site, but website owners can also choose to have Google host the search results page. You can now redirect visitors using these high-end mobile devices to Google-hosted search results, and we will serve up search results optimized for these devices. Better yet, we create a Google-hosted <i>home page</i> for every Custom Search engine that we create (even if you decide to host the results on your own website). Starting today, users who arrive at the home page for <i>your</i> Custom Search engine will be automatically served pocket-sized Custom Search results, along with your search engine customizations, like your <a title="labels" href="http://googlecustomsearch.blogspot.com/2008/03/labels-in-custom-search.html" id="mal2">labels</a> and <a title="promotions" href="http://googlecustomsearch.blogspot.com/2009/05/custom-search-promotions-made-easier.html" id="tty4">promotions</a>.<br /><br />All you need to do at your own end is <i>redirect</i> users who arrive at your website on one of the supported mobile devices to the hosted Custom Search home page. Another alternative is to provide a button or link on your web site that directs people to your Custom Search home page, whose URL looks like (you will need to replace the ID after "cx=" with your own Custom Search engine ID):<br /><span class="Apple-style-span" style="font-family:'Courier New';"><br />http://www.google.com/cse/home?cx=013315504628135767172:d6shbtxu-uo<br /></span><br />Of course, if you'd like to serve these mobile results from your own website, you can replicate the functionality of the mobile home page on your own website. This page uses the <a title="Custom Search Element" href="http://googlecustomsearch.blogspot.com/2009/05/introducing-custom-search-web-element.html" id="o1g9">Custom Search Element</a>. If you do, you will still need to take care of the redirection at your website so that mobile users receive mobile-friendly search results automatically.<br /><br />If Google web search is the entry point for navigating the web, we hope you'll use this interactive Custom Mobile Search entry point to help people navigate your own web content when they need information on the go!<br /><br /><span class="byline-author">Posted by: Radu Cornea, Software Engineer and John Skidgel, Senior Interaction Designer</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> In our recent Product Ideas <a href="http://productideas.appspot.com/#25/e=21999" id="b6ob" target="_blank" title="survey">survey</a>, one of the most-requested features was about enabling a mobile version of Custom Search. Guess what: It's here! As announced on the <a href="http://googlemobile.blogspot.com/2009/10/google-custom-search-for-mobile.html">Google Mobile blog</a>, Custom Search now enables a rich interactive mobile experience on high-end devices such as Android-powered phones, iPhone, iPod touch, and Palm Pre.<br /><br />Try it out on your phone right now: <a href="http://googlecustomsearch.appspot.com/social/" id="d8yq" target="_blank" title="user-generated content">search for user-generated content</a> (e.g., search for [maradona]) from sites like Wikipedia, Knol, etc., or learn all about the latest and greatest Custom Search features on our product's <a href="http://googlecustomsearch.appspot.com/cse/" id="jjza" target="_blank" title="mobile search engine">mobile search engine</a> (e.g., search for [snippets]).<div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxPApBPCCeXgkDGaaU7L-Nfwgeu-o7pBgC5_q3ZbH789AZGluklwscjOoeSi8Kzk0TCyZLY8bkGp1G7dflrXktQGDWZKKC__rhvLkzPEizGKx7QV1Avb0ILjeG-pcvupMayQL67qVFDH00/s1600-h/iphone_cse.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5395555434086659458" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxPApBPCCeXgkDGaaU7L-Nfwgeu-o7pBgC5_q3ZbH789AZGluklwscjOoeSi8Kzk0TCyZLY8bkGp1G7dflrXktQGDWZKKC__rhvLkzPEizGKx7QV1Avb0ILjeG-pcvupMayQL67qVFDH00/s320/iphone_cse.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 205px; height: 320px;" /></a>Custom Search engine results can be embedded in your own site, but website owners can also choose to have Google host the search results page. You can now redirect visitors using these high-end mobile devices to Google-hosted search results, and we will serve up search results optimized for these devices. Better yet, we create a Google-hosted <i>home page</i> for every Custom Search engine that we create (even if you decide to host the results on your own website). Starting today, users who arrive at the home page for <i>your</i> Custom Search engine will be automatically served pocket-sized Custom Search results, along with your search engine customizations, like your <a title="labels" href="http://googlecustomsearch.blogspot.com/2008/03/labels-in-custom-search.html" id="mal2">labels</a> and <a title="promotions" href="http://googlecustomsearch.blogspot.com/2009/05/custom-search-promotions-made-easier.html" id="tty4">promotions</a>.<br /><br />All you need to do at your own end is <i>redirect</i> users who arrive at your website on one of the supported mobile devices to the hosted Custom Search home page. Another alternative is to provide a button or link on your web site that directs people to your Custom Search home page, whose URL looks like (you will need to replace the ID after "cx=" with your own Custom Search engine ID):<br /><span class="Apple-style-span" style="font-family:'Courier New';"><br />http://www.google.com/cse/home?cx=013315504628135767172:d6shbtxu-uo<br /></span><br />Of course, if you'd like to serve these mobile results from your own website, you can replicate the functionality of the mobile home page on your own website. This page uses the <a title="Custom Search Element" href="http://googlecustomsearch.blogspot.com/2009/05/introducing-custom-search-web-element.html" id="o1g9">Custom Search Element</a>. If you do, you will still need to take care of the redirection at your website so that mobile users receive mobile-friendly search results automatically.<br /><br />If Google web search is the entry point for navigating the web, we hope you'll use this interactive Custom Mobile Search entry point to help people navigate your own web content when they need information on the go!<br /><br /><span class="byline-author">Posted by: Radu Cornea, Software Engineer and John Skidgel, Senior Interaction Designer</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Programmable Search Engine Blog:Google Custom Search for your smartphone&url=https://programmablesearchengine.googleblog.com/2009/10/google-custom-search-for-your-smartphone.html&via=google'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://programmablesearchengine.googleblog.com/2009/10/google-custom-search-for-your-smartphone.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2009/10/google-custom-search-for-your-smartphone.html' data-url='https://programmablesearchengine.googleblog.com/2009/10/google-custom-search-for-your-smartphone.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2009/10/google-custom-search-for-your-smartphone.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='post' data-id='6903690750278329578' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2009/10/google-sites-turns-custom-search-on.html' itemprop='url' title='Google Sites turns Custom Search on'> Google Sites turns Custom Search on </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, October 8, 2009 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <a title="Google Sites" href="http://sites.google.com/" id="c50:">Google Sites</a> offers users a very simple way to create and publish web sites. Multiple users can collaborate to manage website content as well as add various gadgets into their websites. Google Sites <a title="allows users to turn on" href="http://googleappsposts.blogspot.com/2009/08/copy-your-site-more-search-options-and.html" id="k088">now allows</a> the addition of <a title="Google Custom Search" href="//www.google.com/cse" id="wjk1">Google Custom Search</a> as a search option.<br /><br />In the following example, we add a <i><b>Yoga Search</b></i> Custom Search experience to the <i><b>Yoga for Life</b></i> web site in a few simple steps. (The example assumes that the <i><b>Yoga for Life</b></i> website is hosted by Google Sites, and that the <i><b>Yoga Search</b></i> has already been created using Google Custom Search.)<br /><ol><li>Login to your Google Site, and select the <b>"Manage Site"</b> option in the <b>"More Actions" </b>dropdown.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpuvum92bdf8T9l5pdevQMRMer89cX4QbegEHT1Huh4OG-KnpY17mqpMU_OLppwXJRmBm0tWecN6I3BtdPdTGMF76zvYlrR2W3IGuG9Fsu6SxvCMy5UDNMBfRSz9BbjktBi7e3woOfnZg4/s1600-h/site_manage_layout.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390297346916884434" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpuvum92bdf8T9l5pdevQMRMer89cX4QbegEHT1Huh4OG-KnpY17mqpMU_OLppwXJRmBm0tWecN6I3BtdPdTGMF76zvYlrR2W3IGuG9Fsu6SxvCMy5UDNMBfRSz9BbjktBi7e3woOfnZg4/s400/site_manage_layout.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 164px;" /></a></li><br /><li>Select the <b>"Site Layout"</b> option from the Navigation menu on the left. Click the <b>"Configure Search"</b> button.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtxmdpUD9VULjTigmV-72qdQah4mE2wWQfbzDMYFhUoM0vMLZF5D58A9vIFtEJrJYcwZ3gAkGiJa_8-7rmqgyZ8JsFvTF2G4T7atgcaxelPVeMRLaEfLlw7ZpMkgohoaYxfDBaUvp3at1W/s1600-h/site_layout.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390297943121807682" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtxmdpUD9VULjTigmV-72qdQah4mE2wWQfbzDMYFhUoM0vMLZF5D58A9vIFtEJrJYcwZ3gAkGiJa_8-7rmqgyZ8JsFvTF2G4T7atgcaxelPVeMRLaEfLlw7ZpMkgohoaYxfDBaUvp3at1W/s400/site_layout.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 265px;" /></a></li><br /><li>Select the <b>Advanced</b> tab in the <b>"Configure site search"</b> dialog. To add a new search provider, click on the <b>"Add provider"</b> button.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_OBtRUaVnyVSvwkNFQK8M97xIEuyKquUKdp7znmsvvm8EM0-7HYWtYVIH7k-NNQP8Tkvir9BRkJltkxpK0435njop5B894q07JToFObeO-HVt97mETYp5nm4SRX_iGesYx6G2EHwgOgM2/s1600-h/site_add_search_provider.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390298284353159634" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_OBtRUaVnyVSvwkNFQK8M97xIEuyKquUKdp7znmsvvm8EM0-7HYWtYVIH7k-NNQP8Tkvir9BRkJltkxpK0435njop5B894q07JToFObeO-HVt97mETYp5nm4SRX_iGesYx6G2EHwgOgM2/s400/site_add_search_provider.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 298px;" /></a></li><br /><li>Now, we'll need to get information about the Custom Search engine we want to use. Open up another tab or browser window and <a title="login" href="//www.google.com/cse/manage/all" id="auxk">login</a> to the Custom Search control panel. Find the URL for the search engine you want to use by clicking on it's name in the list called <a title="list of search engines" href="//www.google.com/cse/manage/all" id="vwu6">My search engines</a>. Copy this URL; you will use it in the next step. In this example, we'll use the URL for <i><b>Yoga Search</b></i>.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM9sHJ4efAZzyX7nnuXY6CEg-HFl41e-9mnVgXqNTktMkpRZQFcHrZk9_n7-HYLxVfQoDi7BBZEjOy2LVtWphBLL-b86EdxI58Y0pzhYEPLN0szY4AR6SKIiZ7Ahmuwi5HDvDGBzSPlS3j/s1600-h/site_get_cse_url.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390299126770349970" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM9sHJ4efAZzyX7nnuXY6CEg-HFl41e-9mnVgXqNTktMkpRZQFcHrZk9_n7-HYLxVfQoDi7BBZEjOy2LVtWphBLL-b86EdxI58Y0pzhYEPLN0szY4AR6SKIiZ7Ahmuwi5HDvDGBzSPlS3j/s400/site_get_cse_url.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 112px;" /></a></li><br /><li>Go back to the Google Sites search provider dialog. Select <b>"Google Custom Search"</b> as the provider type. Type in the <b>Name</b>, e.g., "Yoga Search" for the search option you'd like your users see on your site, and paste the <b>Custom Search Engine URL</b> that you obtained in the earlier step. Leave the <b>Show results in site</b> option checked. Click <b>OK</b>.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT-9Fy7x4X9_oxt6iqcHwn88J1qGI90uQ_9a5LK1KebVxTC35MIKLlNlcdsNORxKwNbdOL7s9EXbSB-P0p_Y7a9kniAcO9sI1fEfPmN_-op_wnC3ZJmkbQ6TKG1aB3rz-yvaYic3MbhuvG/s1600-h/site_add_cse_provider.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390298611619248450" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT-9Fy7x4X9_oxt6iqcHwn88J1qGI90uQ_9a5LK1KebVxTC35MIKLlNlcdsNORxKwNbdOL7s9EXbSB-P0p_Y7a9kniAcO9sI1fEfPmN_-op_wnC3ZJmkbQ6TKG1aB3rz-yvaYic3MbhuvG/s400/site_add_cse_provider.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 223px;" /></a></li><br /><li>You can change your default provider by clicking on the<b> "General"</b> tab in the <b>"Configure site search" </b>dialog and selecting "Yoga Search". Make sure to <b>Save</b> your settings. You're done.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3afMwfdTaBmSN2wQndU2j4zGBFDwv3k6wdchgvYRjB_Z5zEGC1kvmtxtxxczI_cpYdbOO3ZV_6IZc9XjEe1AhfIbPQ_1VxVfLkgkwx1R_jZJCEdSY6cIKSE7m3IoqgDhKi_sgeFkPkQEu/s1600-h/site_select_default_provider.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390299664271149426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3afMwfdTaBmSN2wQndU2j4zGBFDwv3k6wdchgvYRjB_Z5zEGC1kvmtxtxxczI_cpYdbOO3ZV_6IZc9XjEe1AhfIbPQ_1VxVfLkgkwx1R_jZJCEdSY6cIKSE7m3IoqgDhKi_sgeFkPkQEu/s400/site_select_default_provider.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 297px;" /></a></li><br /><li>Your users will see <i><b>Yoga Search</b></i> as the default search option in the search box on the <i><b>Yoga for Life</b></i> website. Search, and your results from the <i><b>Yoga Search</b></i> Custom Search engine will show up inline, with the look and feel of your site.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY-q1qlQ1Nvsi4dSpSJ9Rx845i4n3R8_5H3saLFPV0ArJfbGVa8m0qIxsQsxGMCAdec0PyqBt4DxOW2xp2uRDgjNDYGOayyrBSRlb20qG_LLn0EXq88rtHvviX_nd-ndGIIXDjrt1U1FHR/s1600-h/site_cse_search_results.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390300065861846530" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY-q1qlQ1Nvsi4dSpSJ9Rx845i4n3R8_5H3saLFPV0ArJfbGVa8m0qIxsQsxGMCAdec0PyqBt4DxOW2xp2uRDgjNDYGOayyrBSRlb20qG_LLn0EXq88rtHvviX_nd-ndGIIXDjrt1U1FHR/s400/site_cse_search_results.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 291px;" /></a></li><br /></ol>Try it out for your site, with your own Custom Search engine! As always, we'd love to hear your feedback on new features in the <a title="user group" href="//www.google.com/support/forum/p/customsearch?hl=en" id="v928">user group</a>.<br /><br /><span class="byline-author">Posted by: Scott Johnston, Senior Product Manager, Google Sites and Rajat Mukherjee, Group Product Manager, Search</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <a title="Google Sites" href="http://sites.google.com/" id="c50:">Google Sites</a> offers users a very simple way to create and publish web sites. Multiple users can collaborate to manage website content as well as add various gadgets into their websites. Google Sites <a title="allows users to turn on" href="http://googleappsposts.blogspot.com/2009/08/copy-your-site-more-search-options-and.html" id="k088">now allows</a> the addition of <a title="Google Custom Search" href="//www.google.com/cse" id="wjk1">Google Custom Search</a> as a search option.<br /><br />In the following example, we add a <i><b>Yoga Search</b></i> Custom Search experience to the <i><b>Yoga for Life</b></i> web site in a few simple steps. (The example assumes that the <i><b>Yoga for Life</b></i> website is hosted by Google Sites, and that the <i><b>Yoga Search</b></i> has already been created using Google Custom Search.)<br /><ol><li>Login to your Google Site, and select the <b>"Manage Site"</b> option in the <b>"More Actions" </b>dropdown.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpuvum92bdf8T9l5pdevQMRMer89cX4QbegEHT1Huh4OG-KnpY17mqpMU_OLppwXJRmBm0tWecN6I3BtdPdTGMF76zvYlrR2W3IGuG9Fsu6SxvCMy5UDNMBfRSz9BbjktBi7e3woOfnZg4/s1600-h/site_manage_layout.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390297346916884434" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpuvum92bdf8T9l5pdevQMRMer89cX4QbegEHT1Huh4OG-KnpY17mqpMU_OLppwXJRmBm0tWecN6I3BtdPdTGMF76zvYlrR2W3IGuG9Fsu6SxvCMy5UDNMBfRSz9BbjktBi7e3woOfnZg4/s400/site_manage_layout.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 164px;" /></a></li><br /><li>Select the <b>"Site Layout"</b> option from the Navigation menu on the left. Click the <b>"Configure Search"</b> button.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtxmdpUD9VULjTigmV-72qdQah4mE2wWQfbzDMYFhUoM0vMLZF5D58A9vIFtEJrJYcwZ3gAkGiJa_8-7rmqgyZ8JsFvTF2G4T7atgcaxelPVeMRLaEfLlw7ZpMkgohoaYxfDBaUvp3at1W/s1600-h/site_layout.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390297943121807682" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtxmdpUD9VULjTigmV-72qdQah4mE2wWQfbzDMYFhUoM0vMLZF5D58A9vIFtEJrJYcwZ3gAkGiJa_8-7rmqgyZ8JsFvTF2G4T7atgcaxelPVeMRLaEfLlw7ZpMkgohoaYxfDBaUvp3at1W/s400/site_layout.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 265px;" /></a></li><br /><li>Select the <b>Advanced</b> tab in the <b>"Configure site search"</b> dialog. To add a new search provider, click on the <b>"Add provider"</b> button.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_OBtRUaVnyVSvwkNFQK8M97xIEuyKquUKdp7znmsvvm8EM0-7HYWtYVIH7k-NNQP8Tkvir9BRkJltkxpK0435njop5B894q07JToFObeO-HVt97mETYp5nm4SRX_iGesYx6G2EHwgOgM2/s1600-h/site_add_search_provider.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390298284353159634" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_OBtRUaVnyVSvwkNFQK8M97xIEuyKquUKdp7znmsvvm8EM0-7HYWtYVIH7k-NNQP8Tkvir9BRkJltkxpK0435njop5B894q07JToFObeO-HVt97mETYp5nm4SRX_iGesYx6G2EHwgOgM2/s400/site_add_search_provider.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 298px;" /></a></li><br /><li>Now, we'll need to get information about the Custom Search engine we want to use. Open up another tab or browser window and <a title="login" href="//www.google.com/cse/manage/all" id="auxk">login</a> to the Custom Search control panel. Find the URL for the search engine you want to use by clicking on it's name in the list called <a title="list of search engines" href="//www.google.com/cse/manage/all" id="vwu6">My search engines</a>. Copy this URL; you will use it in the next step. In this example, we'll use the URL for <i><b>Yoga Search</b></i>.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM9sHJ4efAZzyX7nnuXY6CEg-HFl41e-9mnVgXqNTktMkpRZQFcHrZk9_n7-HYLxVfQoDi7BBZEjOy2LVtWphBLL-b86EdxI58Y0pzhYEPLN0szY4AR6SKIiZ7Ahmuwi5HDvDGBzSPlS3j/s1600-h/site_get_cse_url.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390299126770349970" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM9sHJ4efAZzyX7nnuXY6CEg-HFl41e-9mnVgXqNTktMkpRZQFcHrZk9_n7-HYLxVfQoDi7BBZEjOy2LVtWphBLL-b86EdxI58Y0pzhYEPLN0szY4AR6SKIiZ7Ahmuwi5HDvDGBzSPlS3j/s400/site_get_cse_url.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 112px;" /></a></li><br /><li>Go back to the Google Sites search provider dialog. Select <b>"Google Custom Search"</b> as the provider type. Type in the <b>Name</b>, e.g., "Yoga Search" for the search option you'd like your users see on your site, and paste the <b>Custom Search Engine URL</b> that you obtained in the earlier step. Leave the <b>Show results in site</b> option checked. Click <b>OK</b>.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT-9Fy7x4X9_oxt6iqcHwn88J1qGI90uQ_9a5LK1KebVxTC35MIKLlNlcdsNORxKwNbdOL7s9EXbSB-P0p_Y7a9kniAcO9sI1fEfPmN_-op_wnC3ZJmkbQ6TKG1aB3rz-yvaYic3MbhuvG/s1600-h/site_add_cse_provider.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390298611619248450" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT-9Fy7x4X9_oxt6iqcHwn88J1qGI90uQ_9a5LK1KebVxTC35MIKLlNlcdsNORxKwNbdOL7s9EXbSB-P0p_Y7a9kniAcO9sI1fEfPmN_-op_wnC3ZJmkbQ6TKG1aB3rz-yvaYic3MbhuvG/s400/site_add_cse_provider.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 223px;" /></a></li><br /><li>You can change your default provider by clicking on the<b> "General"</b> tab in the <b>"Configure site search" </b>dialog and selecting "Yoga Search". Make sure to <b>Save</b> your settings. You're done.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3afMwfdTaBmSN2wQndU2j4zGBFDwv3k6wdchgvYRjB_Z5zEGC1kvmtxtxxczI_cpYdbOO3ZV_6IZc9XjEe1AhfIbPQ_1VxVfLkgkwx1R_jZJCEdSY6cIKSE7m3IoqgDhKi_sgeFkPkQEu/s1600-h/site_select_default_provider.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390299664271149426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3afMwfdTaBmSN2wQndU2j4zGBFDwv3k6wdchgvYRjB_Z5zEGC1kvmtxtxxczI_cpYdbOO3ZV_6IZc9XjEe1AhfIbPQ_1VxVfLkgkwx1R_jZJCEdSY6cIKSE7m3IoqgDhKi_sgeFkPkQEu/s400/site_select_default_provider.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 297px;" /></a></li><br /><li>Your users will see <i><b>Yoga Search</b></i> as the default search option in the search box on the <i><b>Yoga for Life</b></i> website. Search, and your results from the <i><b>Yoga Search</b></i> Custom Search engine will show up inline, with the look and feel of your site.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY-q1qlQ1Nvsi4dSpSJ9Rx845i4n3R8_5H3saLFPV0ArJfbGVa8m0qIxsQsxGMCAdec0PyqBt4DxOW2xp2uRDgjNDYGOayyrBSRlb20qG_LLn0EXq88rtHvviX_nd-ndGIIXDjrt1U1FHR/s1600-h/site_cse_search_results.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5390300065861846530" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY-q1qlQ1Nvsi4dSpSJ9Rx845i4n3R8_5H3saLFPV0ArJfbGVa8m0qIxsQsxGMCAdec0PyqBt4DxOW2xp2uRDgjNDYGOayyrBSRlb20qG_LLn0EXq88rtHvviX_nd-ndGIIXDjrt1U1FHR/s400/site_cse_search_results.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 291px;" /></a></li><br /></ol>Try it out for your site, with your own Custom Search engine! As always, we'd love to hear your feedback on new features in the <a title="user group" href="//www.google.com/support/forum/p/customsearch?hl=en" id="v928">user group</a>.<br /><br /><span class="byline-author">Posted by: Scott Johnston, Senior Product Manager, Google Sites and Rajat Mukherjee, Group Product Manager, Search</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Programmable Search Engine Blog:Google Sites turns Custom Search on&url=https://programmablesearchengine.googleblog.com/2009/10/google-sites-turns-custom-search-on.html&via=google'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://programmablesearchengine.googleblog.com/2009/10/google-sites-turns-custom-search-on.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2009/10/google-sites-turns-custom-search-on.html' data-url='https://programmablesearchengine.googleblog.com/2009/10/google-sites-turns-custom-search-on.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2009/10/google-sites-turns-custom-search-on.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> </div> </div> </div> <div class='blog-pager' id='blog-pager'> <a class='home-link' href='https://programmablesearchengine.googleblog.com/'> <i class='material-icons'>  </i> </a> <span id='blog-pager-newer-link'> <a class='blog-pager-newer-link' href='https://programmablesearchengine.googleblog.com/search?updated-max=2010-04-14T22:17:00-07:00&max-results=7&reverse-paginate=true' id='Blog1_blog-pager-newer-link' title='Newer Posts'> <i class='material-icons'>  </i> </a> </span> <span id='blog-pager-older-link'> <a class='blog-pager-older-link' href='https://programmablesearchengine.googleblog.com/search?updated-max=2009-10-08T11:19:00-07:00&max-results=7' id='Blog1_blog-pager-older-link' title='Older Posts'> <i class='material-icons'>  </i> </a> </span> </div> <div class='clear'></div> </div></div> </div> </div> <div class='col-right'> <div class='section' id='sidebar-top'><div class='widget HTML' data-version='1' id='HTML8'> <div class='widget-content'> <div class='searchBox'> <input type='text' title='Search This Blog' placeholder='Search blog ...' /> </div> </div> <div class='clear'></div> </div></div> <div id='aside'> <div class='section' id='sidebar'> <div class='widget BlogArchive' data-version='1' id='BlogArchive1'> <div class='tab'> <i class='material-icons icon'>  </i> <h2> Archive </h2> <i class='material-icons arrow'>  </i> </div> <div class='widget-content'> <div id='ArchiveList'> <div id='BlogArchive1_ArchiveList'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2024/'> 2024 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2024/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2023/'> 2023 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2023/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2023/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2023/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2022/'> 2022 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2022/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2022/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2022/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2022/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2021/'> 2021 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2021/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2021/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2020/'> 2020 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2020/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2020/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2020/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2020/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2020/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2020/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2019/'> 2019 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2019/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2019/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2019/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2018/'> 2018 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2018/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2017/'> 2017 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2017/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2017/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2014/'> 2014 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2014/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2013/'> 2013 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2013/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2013/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2013/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2013/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2013/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2012/'> 2012 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2012/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2012/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2012/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2012/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2012/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2012/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2011/'> 2011 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2011/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2011/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2011/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2011/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2011/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2011/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2011/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2011/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2011/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2011/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2011/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2010/'> 2010 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2010/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2010/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2010/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2010/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2010/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2010/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2010/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2010/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2010/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2010/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate expanded'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy toggle-open'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2009/'> 2009 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2009/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2009/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate expanded'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2009/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2009/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2009/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2009/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2009/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2009/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2009/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2009/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2009/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2009/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2008/'> 2008 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2008/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2008/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2008/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2008/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2008/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2008/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2008/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2008/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2008/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2008/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2008/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2007/'> 2007 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2007/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2007/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2007/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2007/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2007/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2007/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2007/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2007/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2007/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2007/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2007/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2007/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2006/'> 2006 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2006/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://programmablesearchengine.googleblog.com/2006/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> </div> </div> <div class='clear'></div> </div> </div><div class='widget HTML' data-version='1' id='HTML1'> <h2 class='title'>Useful links</h2> <div class='widget-content'> <a href="https://programmablesearchengine.google.com/">Programmable Search Engine</a><br /> <a href="https://support.google.com/programmable-search">Help Center</a><br /> <a href="https://support.google.com/programmable-search/community">Support Forum</a><br /> <a href="https://developers.google.com/custom-search">Developer Documentation</a><br /> <a href="https://blog.google/products/adsense/">Google AdSense Blog</a> </div> <div class='clear'></div> </div></div> <div class='no-items section' id='sidebar-bottom'></div> </div> </div> <div style='clear:both;'></div> </div> <div class='google-footer-outer loading'> <div id='google-footer'> <a href='//www.google.com/'> <img class='google-logo-dark' height='36' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALgAAABICAYAAABFoT/eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACLVJREFUeNrsXd+L20YQ3vOprdLqiMXFXE2qB7dcwEcTSB7ykIc+9A/PQx/yEMq1TWhNuYIpJriNr7XpmZ5IxFEvmW2EKs3Ornb1w50PxIFP0kiz387OzM6uhGAwGAxGP3Ho+f7x7ri1O7LdccPqZjSNA4dEHsLfaHcEFedJom93x9Xu2OyOFTcBo6sED3fHZHeMEELrkAHJF0B8Rr+gDFsZ5n0luLTQ95AXs4W06D/tjpR50xtM4CjD0y48YGB4rnyZxNOzyA7zBHr+nLnDaJLg0mo/ALekCasg3Z4XbM0ZdTEgnDPeHY8bIne+Qz2GvwyGNwsuyT218KWvIIBMcwGpLiipcolecjMxfBDchNyS1EvxLiOSIecp31q6IJ/C3yrIrMqMm4jhg+AxkdwbIO3aUO4KjqqMjCT3uaazMBhWBJfuxH3CtRfiXf66DhSRZWbmlMnNaILgZxrXJQO/eO3wORZwvwm4JUxuhheCjzVBYAbW1ces45YDSoZrFNOEE835M8FT6oyeEnws8Fz3QnBxFKPHBMem4GU+m6fPGb0leCTwWcM5B36MPgeZI01gudyDdw3hPeXfo8L/rmCUWnuMMdqUL2WqWeRbhf+twfVsO7YagZGNC79fw7OthEVtkiJ4jJzTd3KPwf3CRqhhiTu23AP5sl0/0xiwISQXpNwLIJK87mHF+U8ddzzdmgKlGzlPYjyxGJQouIhNT4k9AqWEFkqfguIvagTWbcq3KW1WE3xS3m8NtA9WS451xofwjKT5kkDoK/b6mDk5FfXr1lWDL4BofZEv2/SRsK/EHGlGdBdu8QNRb8HMCFwt7Yy3DDI/QP7fx5z3VLhdlJEIs4rKNuXXJXdxZPdB7kfCzWqwCO4V1LHgLjInX3tQ1KzCR52Cz+vDj1dydeRuS74rcvs2Pi6fT5H8OaaUQPQPYcWwRSGXyhhscn5dpAnEFMkuEZetbfkTAnlSuH4DxisE+aMGeJAQ3lFl7C4LJE6QWCaCd583ORQ1jYAwjFctal7nOs2ZZvicwvlZx+RHGrcoAwKUVX8uwcc/9TT65INeDOr5shL9LDRB6QTeIy3zwfdh3WOi6axLCEhSjXU7F3h6LqggUtvyJxpynwu8tDkD98fXApOxRj8zoZ9MnGveYVIVZKaGrkBXCY65BCYNN9NkjpKOyQ81Q79JgdxS+Jn3SDTEXRI7SWzaiSTB32oI3nU3BvMfM0urhOVYgwKhuiAfc4tM07wXwm1ZRoQYSl2NUwiu01fEAHVcpixd745FvVz4dzUUc0o8rwoLy8ZSwU6CyFx1RP5II9+1bFPEFs9HWbNLiimDXE+vCm7u1CS47cofzD3aEhVY57mxRo5zlqdt+RFC1JUH2S7bcVXg4liTMakaBZZVxiTICRoivcn1sEUBlk24JmaC6kxUbYmWoqvyfck2xZGGnDFYa9MMzkYQ1ijkCX6qidybrgePiQ0QIQqoi6qRLeqQfIoRsEHaQJLBdHOnLGetSdm/IPcymJuS1PAnbQPH0MOw/39C1vL11DiLOqIsbDI8QcHvGiLnySi2qUXBicaqUSxN5LEB0g7Jt3ENXJLPJ5S1tnaZBoWbpRqrmjRE7qHmpSmNHdQcYrEUadoh+TbBnc9ri7iycI1kzPeNcLDIvbiqXpez9Tmdq6zGREPuzECBoxrPMiI2WtvyNwhJba2wy3JZ6ky5dD1lSvmZS3e4SPA1wcf1VTFHKX+cGwZzdUYcqpvUtvwrD/InDttVlyZeAKlNN5MKbAiurHhKIPlUuJvlTCCiDjSKSCsUmCFWbGLZwCESfK07JB8LvMYWVtw0D00JEHV8Mq2HkqPbE0oHLvvK2g0o8ETg+4cfwTlZDT9JDoWygu4uQQE/ivIvtcnfPkaCqhiupz7jWOAzqL/vjtcdkv9G4MVMt+EaylfuImiPAXEUjRF3pjjaHiPPZ6If9TGGAO4ZY0am6jOCb+DQ+ZCqLkIpOIPrdNfIjnFPY6nyFut7TS/fanrziOBOKMupKw94WaLMtuVnSFt9CPrWWdJE6PeltCX432DEBoh+5Dv8RRhdis8YAv9uyq4/JAwtlEApgBe9Cw9xDD3tdk4Jn0MDfiHwPHcRPxBePCMER3GuIx7kGlv9fkZ4V9lolx2Uv4X7hEj7qJ3LDoAMGbTRMRibu4L2xQ8bgt8AyU+Q+x7nYrvDnH4iuO5LxKsYwPVbkPMvKF9Zky9wXzRfVWizi62r9X5VHf55h+WHhDjGBZ4WRhyTr6z5SlCoLMxLSpBZFsQ9F80uQFbF/6aFWi+Ev51vzzsuX+msyzuQXXjUz8zEBy+zpq9yweXAoxJW4JbYrDS6gYDqGHxPl+TKeiBfxj9/EBIElPYeOA4y8/qRQfknjvSzgRgtq0Pw/M1eQeMdOSb2Bnrhr6Led+1vcp2x7oTFHMnedFW+Ivlty062BUt74oHgSj+vHepnhunn0JJAMtBZgDI/qmGtMujRv8DDpo47zBJ8UtPOuAR/7rKn8t9AJ0tBdmBAmJ/Fu71yxp4I3qh+DhyRqbi5Y1ShVPlSb8X7bRNcfgZFl+WRGYo7uecrWq1r8X5bhmzP5OdlDwsGRm1suSxkg5rYm7ConyGQ3Zl+DgSD8V/kPwrWBMG9YcBtyShBnTLdTiHgttw7qAW7cqh/ZnmPKr/6ignOaKsdyxbsToT5UkPsW00bJjijDXficcX/JsLs6w2BwGtherdckH3w/kNXRPVI0OqJQoHX42/66IMfMj/2huRjxIidgKV/W0JS+bsstDoTeAHcrI8E5zTh/sDkqxL5rZup55/3USlswfcHf4IrQplVDgW9XFlOqnwr6pVPMMEZTuC60EttvdzbLbaZ4PsFVa3nohhO+vW+yn/ZB2fUhpysmQrzBcTSai9EszuZMcEZ1lCFVrp9zGXhm69iLyY4oxFIa178lPe12I/P2DAYDAaDwWAwGAwGg8FgMBgMBoPBYDD2Cf8IMADDRGoQTe+E9AAAAABJRU5ErkJggg==' style='margin-top: -16px;' width='92'/> </a> <ul> <li> <a href='//www.google.com/'> Google </a> </li> <li> <a href='//www.google.com/policies/privacy/'> Privacy </a> </li> <li> <a href='//www.google.com/policies/terms/'> Terms </a> </li> </ul> </div> </div> <script type='text/javascript'> //<![CDATA[ // Social sharing popups. var postEl = document.getElementsByClassName('social-wrapper'); var postCount = postEl.length; for(i=0; i<postCount;i++){ postEl[i].addEventListener("click", function(event){ var postUrl = this.getAttribute("data-href"); window.open( postUrl,'popUpWindow','height=500,width=500,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes'); });} //]]> </script> <script type='text/javascript'> //<![CDATA[ var BreakpointHandler = function() { this.initted = false; this.isHomePage = false; this.isMobile = false; }; BreakpointHandler.prototype.finalizeSummary = function(summaryHtml, lastNode) { // Use $.trim for IE8 compatibility summaryHtml = $.trim(summaryHtml).replace(/(<br>|\s)+$/,''); if (lastNode.nodeType == 3) { var lastChar = summaryHtml.slice(-1); if (!lastChar.match(/[.”"?]/)) { if (!lastChar.match(/[A-Za-z]/)) { summaryHtml = summaryHtml.slice(0, -1); } summaryHtml += ' ...'; } } else if (lastNode.nodeType == 1 && (lastNode.nodeName == 'I' || lastNode.nodeName == 'A')) { summaryHtml += ' ...'; } return summaryHtml; }; BreakpointHandler.prototype.generateSummaryFromContent = function(content, numWords) { var seenWords = 0; var summaryHtml = ''; for (var i=0; i < content.childNodes.length; i++) { var node = content.childNodes[i]; var nodeText; if (node.nodeType == 1) { if (node.hasAttribute('data-about-pullquote')) { continue; } nodeText = node.textContent; if (nodeText === undefined) { // innerText for IE8 nodeText = node.innerText; } if (node.nodeName == 'DIV' || node.nodeName == 'B') { // Don't end early if we haven't seen enough words. if (seenWords < 10) { continue; } if (i > 0) { summaryHtml = this.finalizeSummary(summaryHtml, content.childNodes[i-1]); } break; } summaryHtml += node.outerHTML; } else if (node.nodeType == 3) { nodeText = node.nodeValue; summaryHtml += nodeText + ' '; } var words = nodeText.match(/\S+\s*/g); if (!words) { continue; } var remain = numWords - seenWords; if (words.length >= remain) { summaryHtml = this.finalizeSummary(summaryHtml, node); break; } seenWords += words.length; } return summaryHtml; }; BreakpointHandler.prototype.detect = function() { var match, pl = /\+/g, search = /([^&=]+)=?([^&]*)/g, decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); }, query = window.location.search.substring(1); var urlParams = {}; while (match = search.exec(query)) urlParams[decode(match[1])] = decode(match[2]); this.isListPage = $('html').hasClass('list-page'); this.isMobile = urlParams['m'] === '1'; this.isHomePage = window.location.pathname == '/'; }; BreakpointHandler.prototype.initContent = function() { var self = this; $('.post').each(function(index) { var body = $(this).children('.post-body')[0]; var content = $(body).children('.post-content')[0]; $(content).addClass('post-original'); var data = $(content).children('script').html(); data = self.rewriteForSSL(data); // If exists, extract specified editor's preview. var match = data.match(/([\s\S]+?)<div data-is-preview.+?>([\s\S]+)<\/div>/m); if (match) { data = match[1]; } // Prevent big images from loading when they aren't needed. // This must be done as a pre-injection step, since image loading can't be // canceled once embedded into the DOM. if (self.isListPage && self.isMobile) { data = data.replace(/<(img|iframe) .+?>/g, ''); } // Insert template to be rendered as nodes. content.innerHTML = data; if (self.isListPage) { var summary = document.createElement('div'); $(summary).addClass('post-content'); $(summary).addClass('post-summary'); body.insertBefore(summary, content); if (match) { // Use provided summary. summary.innerHTML = match[2]; } else { // Generate a summary. // Summary generation relies on DOM, so it must occur after content is // inserted into the page. summary.innerHTML = self.generateSummaryFromContent(content, 30); } // Add read more link to summary. var titleAnchor = $(this).find('.title a')[0]; var link = titleAnchor.cloneNode(true); link.innerHTML = 'Read More'; $(link).addClass('read-more'); summary.appendChild(link); } }); // Firefox does not allow for proper styling of BR. if (navigator.userAgent.indexOf('Firefox') > -1) { $('.post-content br').replaceWith('<span class="space"></span>'); } $('.loading').removeClass('loading'); }; BreakpointHandler.prototype.process = function() { if (!this.initted) { var makeInsecureImageRegex = function(hosts) { var whitelist = hosts.join('|').replace(/\./g,'\\.'); // Normal image tags, plus input images (yes, this is possible!) return new RegExp('(<(img|input)[^>]+?src=("|\'))http:\/\/(' + whitelist +')', 'g'); }; this.sslImageRegex = makeInsecureImageRegex(BreakpointHandler.KNOWN_HTTPS_HOSTS); this.sslImageCurrentDomainRegex = makeInsecureImageRegex([window.location.hostname]); this.detect(); this.initContent(); this.initted = true; } }; BreakpointHandler.KNOWN_HTTPS_HOSTS = [ "www.google.org", "www.google.com", "services.google.com", "blogger.com", "draft.blogger.com", "www.blogger.com", "photos1.blogger.com", "photos2.blogger.com", "photos3.blogger.com", "blogblog.com", "img1.blogblog.com", "img2.blogblog.com", "www.blogblog.com", "www1.blogblog.com", "www2.blogblog.com", "0.bp.blogspot.com", "1.bp.blogspot.com", "2.bp.blogspot.com", "3.bp.blogspot.com", "4.bp.blogspot.com", "lh3.googleusercontent.com", "lh4.googleusercontent.com", "lh5.googleusercontent.com", "lh6.googleusercontent.com", "themes.googleusercontent.com", ]; BreakpointHandler.prototype.rewriteForSSL = function(html) { // Handle HTTP -> HTTPS source replacement of images, movies, and other embedded content. return html.replace(this.sslImageRegex, '$1https://$4') .replace(this.sslImageCurrentDomainRegex, '$1//$4') .replace(/(<(embed|iframe)[^>]+?src=("|'))http:\/\/([^"']*?(youtube|picasaweb\.google)\.com)/g, '$1https://$4') // Slideshow SWF takes a image host, so we need to rewrite that parameter. .replace(/(<embed[^>]+?feed=http(?=[^s]))/g, '$1s'); }; $(document).ready(function() { var handler = new BreakpointHandler(); handler.process(); // Top-level navigation. $(".BlogArchive .tab").click(function(ev) { ev.preventDefault(); $(this).parent().toggleClass('active'); $(this).siblings().slideToggle(300); }); $(".Label .tab").click(function(ev) { ev.preventDefault(); $(this).parent().toggleClass('active'); $(this).siblings().slideToggle(300); }); // Blog archive year expansion. $('.BlogArchive .intervalToggle').click(function(ev) { ev.preventDefault(); if ($(this).parent().hasClass('collapsed')) { $(this).parent().removeClass('collapsed'); $(this).parent().addClass('expanded'); } else { $(this).parent().removeClass('expanded'); $(this).parent().addClass('collapsed'); } }); // Reverse order of months. $('.BlogArchive .intervalToggle + div').each(function(_, items) { var year = $(this); year.children().each(function(_, month) { year.prepend(month); }); }); // Set anchors to open in new tab. $('.post-content img').parent().each(function(_, node) { if (node.nodeName == 'A') { $(this).attr('target', '_blank'); } }); // Process search requests. $('.searchBox input').on("keypress", function(ev) { if (ev.which == 13) { window.location.href = 'https://www.google.com/search?q=site%3A' + window.location.hostname + '%20' + encodeURIComponent ($(this).val()); } }); }); //]]> </script> <script type="text/javascript" src="https://www.blogger.com/static/v1/widgets/984859869-widgets.js"></script> <script type='text/javascript'> window['__wavt'] = 'AOuZoY77wJsZq9RZumoJHtedQaA5GdUZ-Q:1732767668954';_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d4174100360396497591','//programmablesearchengine.googleblog.com/2009/10/','4174100360396497591'); _WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '4174100360396497591', 'title': 'Programmable Search Engine Blog', 'url': 'https://programmablesearchengine.googleblog.com/2009/10/', 'canonicalUrl': 'https://programmablesearchengine.googleblog.com/2009/10/', 'homepageUrl': 'https://programmablesearchengine.googleblog.com/', 'searchUrl': 'https://programmablesearchengine.googleblog.com/search', 'canonicalHomepageUrl': 'https://programmablesearchengine.googleblog.com/', 'blogspotFaviconUrl': 'https://programmablesearchengine.googleblog.com/favicon.ico', 'bloggerUrl': 'https://www.blogger.com', 'hasCustomDomain': true, 'httpsEnabled': true, 'enabledCommentProfileImages': true, 'gPlusViewType': 'FILTERED_POSTMOD', 'adultContent': false, 'analyticsAccountNumber': 'UA-961555-71', 'encoding': 'UTF-8', 'locale': 'en', 'localeUnderscoreDelimited': 'en', 'languageDirection': 'ltr', 'isPrivate': false, 'isMobile': false, 'isMobileRequest': false, 'mobileClass': '', 'isPrivateBlog': false, 'isDynamicViewsAvailable': true, 'feedLinks': '\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Programmable Search Engine Blog - Atom\x22 href\x3d\x22https://programmablesearchengine.googleblog.com/feeds/posts/default\x22 /\x3e\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/rss+xml\x22 title\x3d\x22Programmable Search Engine Blog - RSS\x22 href\x3d\x22https://programmablesearchengine.googleblog.com/feeds/posts/default?alt\x3drss\x22 /\x3e\n\x3clink rel\x3d\x22service.post\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Programmable Search Engine Blog - Atom\x22 href\x3d\x22https://www.blogger.com/feeds/4174100360396497591/posts/default\x22 /\x3e\n', 'meTag': '', 'adsenseHostId': 'ca-host-pub-1556223355139109', 'adsenseHasAds': false, 'adsenseAutoAds': false, 'boqCommentIframeForm': true, 'loginRedirectParam': '', 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/2fafd358a4bcb2b4', 'plusOneApiSrc': 'https://apis.google.com/js/platform.js', 'disableGComments': true, 'interstitialAccepted': false, 'sharing': {'platforms': [{'name': 'Get link', 'key': 'link', 'shareMessage': 'Get link', 'target': ''}, {'name': 'Facebook', 'key': 'facebook', 'shareMessage': 'Share to Facebook', 'target': 'facebook'}, {'name': 'BlogThis!', 'key': 'blogThis', 'shareMessage': 'BlogThis!', 'target': 'blog'}, {'name': 'X', 'key': 'twitter', 'shareMessage': 'Share to X', 'target': 'twitter'}, {'name': 'Pinterest', 'key': 'pinterest', 'shareMessage': 'Share to Pinterest', 'target': 'pinterest'}, {'name': 'Email', 'key': 'email', 'shareMessage': 'Email', 'target': 'email'}], 'disableGooglePlus': true, 'googlePlusShareButtonWidth': 0, 'googlePlusBootstrap': '\x3cscript type\x3d\x22text/javascript\x22\x3ewindow.___gcfg \x3d {\x27lang\x27: \x27en\x27};\x3c/script\x3e'}, 'hasCustomJumpLinkMessage': false, 'jumpLinkMessage': 'Read more', 'pageType': 'archive', 'pageName': 'October 2009', 'pageTitle': 'Programmable Search Engine Blog: October 2009'}}, {'name': 'features', 'data': {}}, {'name': 'messages', 'data': {'edit': 'Edit', 'linkCopiedToClipboard': 'Link copied to clipboard!', 'ok': 'Ok', 'postLink': 'Post Link'}}, {'name': 'template', 'data': {'name': 'custom', 'localizedName': 'Custom', 'isResponsive': false, 'isAlternateRendering': false, 'isCustom': true}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '?view\x3dclassic'}, 'flipcard': {'name': 'flipcard', 'url': '?view\x3dflipcard'}, 'magazine': {'name': 'magazine', 'url': '?view\x3dmagazine'}, 'mosaic': {'name': 'mosaic', 'url': '?view\x3dmosaic'}, 'sidebar': {'name': 'sidebar', 'url': '?view\x3dsidebar'}, 'snapshot': {'name': 'snapshot', 'url': '?view\x3dsnapshot'}, 'timeslide': {'name': 'timeslide', 'url': '?view\x3dtimeslide'}, 'isMobile': false, 'title': 'Programmable Search Engine Blog', 'description': 'The latest news, updates and tips from the Programmable Search Engine team', 'url': 'https://programmablesearchengine.googleblog.com/2009/10/', 'type': 'feed', 'isSingleItem': false, 'isMultipleItems': true, 'isError': false, 'isPage': false, 'isPost': false, 'isHomepage': false, 'isArchive': true, 'isLabelSearch': false, 'archive': {'year': 2009, 'month': 10, 'rangeMessage': 'Showing posts from October, 2009'}}}]); _WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', document.getElementById('Header1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', document.getElementById('Blog1'), {'cmtInteractionsEnabled': false, 'lightboxEnabled': true, 'lightboxModuleUrl': 'https://www.blogger.com/static/v1/jsbin/2646514562-lbx.js', 'lightboxCssUrl': 'https://www.blogger.com/static/v1/v-css/1964470060-lightbox_bundle.css'}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML8', 'sidebar-top', document.getElementById('HTML8'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogArchiveView', new _WidgetInfo('BlogArchive1', 'sidebar', document.getElementById('BlogArchive1'), {'languageDirection': 'ltr', 'loadingMessage': 'Loading\x26hellip;'}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML1', 'sidebar', document.getElementById('HTML1'), {}, 'displayModeFull')); </script> </body> </html>