CINXE.COM

Programmable Search Engine Blog: 2008

<!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: 2008 </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/2008/' 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/2008/' 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/2008/' 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&amp;zx=d617fae0-2d07-4a53-919a-d054a7ce1892' media='none' onload='if(media!=&#39;all&#39;)media=&#39;all&#39;' rel='stylesheet'/><noscript><link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=4174100360396497591&amp;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='2606331474469113632' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/12/searching-google-timeline.html' itemprop='url' title='Searching the Google Timeline'> Searching the Google Timeline </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, December 11, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: </span>Tyler Morse, Software Engineer and Dylan Casey, Product Manager<br /><br />When we set out to build a <a href="//www.google.com/tenthbirthday/" id="ou_a" title="timeline">timeline</a> to commemorate Google's 10th birthday, we wanted to add an experimental search feature. We may be a little biased, but because we needed to search a specific subset of the web, and needed customized presentation, we decided to use <a title="Google Site Search" href="//www.google.com/sitesearch" id="q_ot">Google Site Search</a>, which is powered by the Custom Search platform. Using Site Search, the team designed a customized user interface and user experience, tightly embedded within the timeline application, in a few days.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXPc0oQMK8mkK7g3Ry6LGmIMchLtXYjVq0ihYF3WNgX0Uu6mF3gka0nZ_2A6_j39WxWHq13LFNJy0DsTmOypNmKsPvp1wAiYQkRf99tjnLL0a_vX1gvm4dvIyBfeFZZpTtcT-oqThOSggh/s1600-h/timeline.gif"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5278659514280166834" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXPc0oQMK8mkK7g3Ry6LGmIMchLtXYjVq0ihYF3WNgX0Uu6mF3gka0nZ_2A6_j39WxWHq13LFNJy0DsTmOypNmKsPvp1wAiYQkRf99tjnLL0a_vX1gvm4dvIyBfeFZZpTtcT-oqThOSggh/s400/timeline.gif" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 210px;" /></a>The Google Timeline data is stored and served up as static files of JavaScript objects and arrays. While this was very efficient for the Timeline JavaScript application, we needed to massage the data in order to get it indexed and searchable, as well as tie it back to the timeline objects.<br /><br />We generated static HTML files for all timeline events. The filenames have identifying data in them that allow us to correlate a search result with the original event; this way, we can translate a user click on a search result to the appropriate timeline event. Since we wanted explicit control of event dates, we also encoded the event date in each HTML file.<br /><br />We use Site Search's flexible <a title="XML interface" href="//www.google.com/coop/docs/cse/resultsxml.html" id="quv4">XML interface</a> for retrieving the results. When we get back search results, we parse the XML data, extract specifically the information we need, and render these results.<br /><br />Since we did not want to take users away from the timeline application, we presented the results inline. As we had limited real estate available, we only displayed 3 results at a time. As shown in the screenshot above, we added pagination to the results section, and the ability to sort the events by event date.<br /><br />We couldn't treat our search results like typical URLs, as on Google.com. We wanted to show users the event within the actual timeline when they clicked on a search result, instead of navigating them to the indexed static HTML file. Clicking on a result provides an interactive experience, and brings up the specific timeline event.<br /><br />The end result: a Google search for Google's history, <span style="font-style: italic;">custom </span>fit to meet the specific needs of our timeline, just before we blew out the candles on our cake. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: </span>Tyler Morse, Software Engineer and Dylan Casey, Product Manager<br /><br />When we set out to build a <a href="//www.google.com/tenthbirthday/" id="ou_a" title="timeline">timeline</a> to commemorate Google's 10th birthday, we wanted to add an experimental search feature. We may be a little biased, but because we needed to search a specific subset of the web, and needed customized presentation, we decided to use <a title="Google Site Search" href="//www.google.com/sitesearch" id="q_ot">Google Site Search</a>, which is powered by the Custom Search platform. Using Site Search, the team designed a customized user interface and user experience, tightly embedded within the timeline application, in a few days.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXPc0oQMK8mkK7g3Ry6LGmIMchLtXYjVq0ihYF3WNgX0Uu6mF3gka0nZ_2A6_j39WxWHq13LFNJy0DsTmOypNmKsPvp1wAiYQkRf99tjnLL0a_vX1gvm4dvIyBfeFZZpTtcT-oqThOSggh/s1600-h/timeline.gif"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5278659514280166834" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXPc0oQMK8mkK7g3Ry6LGmIMchLtXYjVq0ihYF3WNgX0Uu6mF3gka0nZ_2A6_j39WxWHq13LFNJy0DsTmOypNmKsPvp1wAiYQkRf99tjnLL0a_vX1gvm4dvIyBfeFZZpTtcT-oqThOSggh/s400/timeline.gif" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 210px;" /></a>The Google Timeline data is stored and served up as static files of JavaScript objects and arrays. While this was very efficient for the Timeline JavaScript application, we needed to massage the data in order to get it indexed and searchable, as well as tie it back to the timeline objects.<br /><br />We generated static HTML files for all timeline events. The filenames have identifying data in them that allow us to correlate a search result with the original event; this way, we can translate a user click on a search result to the appropriate timeline event. Since we wanted explicit control of event dates, we also encoded the event date in each HTML file.<br /><br />We use Site Search's flexible <a title="XML interface" href="//www.google.com/coop/docs/cse/resultsxml.html" id="quv4">XML interface</a> for retrieving the results. When we get back search results, we parse the XML data, extract specifically the information we need, and render these results.<br /><br />Since we did not want to take users away from the timeline application, we presented the results inline. As we had limited real estate available, we only displayed 3 results at a time. As shown in the screenshot above, we added pagination to the results section, and the ability to sort the events by event date.<br /><br />We couldn't treat our search results like typical URLs, as on Google.com. We wanted to show users the event within the actual timeline when they clicked on a search result, instead of navigating them to the indexed static HTML file. Clicking on a result provides an interactive experience, and brings up the specific timeline event.<br /><br />The end result: a Google search for Google's history, <span style="font-style: italic;">custom </span>fit to meet the specific needs of our timeline, just before we blew out the candles on our cake. <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:Searching the Google Timeline&url=https://programmablesearchengine.googleblog.com/2008/12/searching-google-timeline.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/2008/12/searching-google-timeline.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/12/searching-google-timeline.html' data-url='https://programmablesearchengine.googleblog.com/2008/12/searching-google-timeline.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/12/searching-google-timeline.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='5589584370218118742' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/11/on-demand-indexing-for-fast-moving-web.html' itemprop='url' title='On-Demand Indexing for a fast-moving web'> On-Demand Indexing for a fast-moving web </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, November 13, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: </span>Tom Duerig and Nicholas Weininger, Software Engineers<br /><br />Earlier this year when we <a href="http://googleblog.blogspot.com/2008/06/google-site-search-taps-power-of-cloud.html" id="u2ea" title="launched Google Site Search" style="color: rgb(85, 26, 139);">launched Google Site Search</a>, and AdSense for Search <a href="http://adsense.blogspot.com/2008/05/adsense-for-search-now-powered-by.html" id="qfa7" title="started using the">started using</a> the Custom Search platform, we created a special Custom Search Engine (CSE) index for enhanced indexing. Webmasters could submit <a href="//www.google.com/support/webmasters/bin/answer.py?&amp;answer=40318" id="f7qe" title="Sitemaps">Sitemaps</a> in <a href="//www.google.com/webmasters/tools" id="tv-3" title="Webmaster Tools">Webmaster Tools</a>, and the Custom Search platform indexed URLs from these Sitemaps into a special CSE index for more comprehensive coverage.<br /><br />This solved an important problem: the need for <a href="http://googlewebmastercentral.blogspot.com/2008/05/sitemaps-offer-better-coverage-for-your.html">enhanced index coverage</a> for site search. The special CSE index, in addition to the Google index, enabled us to search deeper on selected sites, providing higher search quality.<br /><br />Today, with our launch of <i>On-Demand Indexing</i>, we're addressing the need to provide fast indexing for your important, frequently-changing content. On-Demand indexing allows anyone with a Google Custom Search Engine or Google Site Search to identify and tell us about new pages or recent site changes by submitting a Sitemap to our Webmaster Tools. You can then select this<i> </i>specific<i> </i>Sitemap in the Indexing tab of your CSE control panel and hit the new "Index Now" button. We will immediately schedule the relevant pages for crawling and indexing, and these pages will be included in your search results usually within 24 hours - often much faster.<br /><br /><center><br /><object height="344" width="425"><param name="movie" value="//www.youtube.com/v/oqhU66RP8gQ&amp;hl=en&amp;fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="//www.youtube.com/v/oqhU66RP8gQ&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /></center><br /><br />We realize that new or frequently updated content is often crucial to a website. In order to give you more control over how you use the On-Demand Index resources allocated to you, we will honor the <i>priority </i>and <i>lastmod </i>attributes that you provide in your <a href="https://www.google.com/webmasters/tools/docs/en/protocol.html" id="os7t" title="Sitemaps">Sitemap</a> - this means you can identify what URLs should be given preference. Please ensure that your Sitemap metadata is up-to-date.<br /><br />On-Demand Indexing uses a special index that is designed just for Custom Search. The main Google search indexing process is separate and uses different selection criteria, so submitting pages for On-Demand Indexing will not make them appear any faster in the main Google index, or impact ranking on Google.com. For more information on On-Demand Indexing, as well as the allocation per CSE, please refer to our <a title="FAQ" href="//www.google.com/support/customsearch/bin/topic.py?topic=16792" id="z:ai">FAQ</a>. <span style="color: rgb(255, 0, 0);"></span><br /><br />We are always listening at our <a href="http://groups.google.com/group/google-custom-search" id="d3m1" title="Custom Search discussion group">Custom Search discussion group</a>, so please continue to tell us what features you'd like to see added to Custom Search. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: </span>Tom Duerig and Nicholas Weininger, Software Engineers<br /><br />Earlier this year when we <a href="http://googleblog.blogspot.com/2008/06/google-site-search-taps-power-of-cloud.html" id="u2ea" title="launched Google Site Search" style="color: rgb(85, 26, 139);">launched Google Site Search</a>, and AdSense for Search <a href="http://adsense.blogspot.com/2008/05/adsense-for-search-now-powered-by.html" id="qfa7" title="started using the">started using</a> the Custom Search platform, we created a special Custom Search Engine (CSE) index for enhanced indexing. Webmasters could submit <a href="//www.google.com/support/webmasters/bin/answer.py?&amp;answer=40318" id="f7qe" title="Sitemaps">Sitemaps</a> in <a href="//www.google.com/webmasters/tools" id="tv-3" title="Webmaster Tools">Webmaster Tools</a>, and the Custom Search platform indexed URLs from these Sitemaps into a special CSE index for more comprehensive coverage.<br /><br />This solved an important problem: the need for <a href="http://googlewebmastercentral.blogspot.com/2008/05/sitemaps-offer-better-coverage-for-your.html">enhanced index coverage</a> for site search. The special CSE index, in addition to the Google index, enabled us to search deeper on selected sites, providing higher search quality.<br /><br />Today, with our launch of <i>On-Demand Indexing</i>, we're addressing the need to provide fast indexing for your important, frequently-changing content. On-Demand indexing allows anyone with a Google Custom Search Engine or Google Site Search to identify and tell us about new pages or recent site changes by submitting a Sitemap to our Webmaster Tools. You can then select this<i> </i>specific<i> </i>Sitemap in the Indexing tab of your CSE control panel and hit the new "Index Now" button. We will immediately schedule the relevant pages for crawling and indexing, and these pages will be included in your search results usually within 24 hours - often much faster.<br /><br /><center><br /><object height="344" width="425"><param name="movie" value="//www.youtube.com/v/oqhU66RP8gQ&amp;hl=en&amp;fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="//www.youtube.com/v/oqhU66RP8gQ&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /></center><br /><br />We realize that new or frequently updated content is often crucial to a website. In order to give you more control over how you use the On-Demand Index resources allocated to you, we will honor the <i>priority </i>and <i>lastmod </i>attributes that you provide in your <a href="https://www.google.com/webmasters/tools/docs/en/protocol.html" id="os7t" title="Sitemaps">Sitemap</a> - this means you can identify what URLs should be given preference. Please ensure that your Sitemap metadata is up-to-date.<br /><br />On-Demand Indexing uses a special index that is designed just for Custom Search. The main Google search indexing process is separate and uses different selection criteria, so submitting pages for On-Demand Indexing will not make them appear any faster in the main Google index, or impact ranking on Google.com. For more information on On-Demand Indexing, as well as the allocation per CSE, please refer to our <a title="FAQ" href="//www.google.com/support/customsearch/bin/topic.py?topic=16792" id="z:ai">FAQ</a>. <span style="color: rgb(255, 0, 0);"></span><br /><br />We are always listening at our <a href="http://groups.google.com/group/google-custom-search" id="d3m1" title="Custom Search discussion group">Custom Search discussion group</a>, so please continue to tell us what features you'd like to see added to Custom Search. <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:On-Demand Indexing for a fast-moving web&url=https://programmablesearchengine.googleblog.com/2008/11/on-demand-indexing-for-fast-moving-web.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/2008/11/on-demand-indexing-for-fast-moving-web.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/11/on-demand-indexing-for-fast-moving-web.html' data-url='https://programmablesearchengine.googleblog.com/2008/11/on-demand-indexing-for-fast-moving-web.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/11/on-demand-indexing-for-fast-moving-web.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='2162892264037580916' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/10/knol-now-with-custom-search.html' itemprop='url' title='Knol - now with Custom Search'> Knol - now with Custom Search </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, October 30, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: </span>Cedric Dupont, Product Manager<br /><span class="byline-author"><br /></span><div style="border-width: 0px; margin: 0px; padding: 0px;"><a href="http://knol.google.com/" title="Knol" style="color: rgb(85, 26, 139);">Knol</a> is a project aimed at helping people share their knowledge<i>. </i>Knols (units of knowledge) are authoritative articles written by people about a specific subject, ranging from <a href="http://knol.google.com/k/noshir-mehta/tooth-pain/iQYfUduC/CE-dcg" title="tooth pain" style="color: rgb(85, 26, 139);">tooth pain</a> to <a href="http://knol.google.com/k/william-pentland/solar-energy/1g0rrsoesmjko/2" title="solar energy" style="color: rgb(85, 26, 139);">solar energy</a> to <a href="http://knol.google.com/k/scott-jenson/buttermilk-pancakes/IMd1ml4q/vzc3bg" title="buttermilk pancakes" style="color: rgb(85, 26, 139);">buttermilk pancakes</a>. With all of these knols to browse, our readers have been begging us for a more powerful search tool. Well, today we have good news - we've added the power of Custom Search to Knol.<br /><br /></div>Custom Search gives us all of the speed and relevance of Google's search technology, but required none of the hard labor that went into making Google search what it is today. With Custom Search, Knol visitors will have a fast search experience that features all of the bells and whistles Google searchers have come to love (including our advanced spell checker). When you search within <a href="http://knol.google.com/" title="Knol" style="color: rgb(85, 26, 139);">Knol</a>, the search results look a little different from Web Search results (see this <a href="http://knol.google.com/k/knol/system/knol/pages/Search?q=knee+surgery&amp;restrict=general&amp;cx=000594330844389129669%3Aqwugul23si0&amp;cof=FORID%3A11&amp;ie=UTF-8" title="search for knee surgery" style="color: rgb(85, 26, 139);">search for knee surgery</a>, for instance). We were able to maintain that distinct feel for Knol search by taking advantage of the Custom Search XML results format (via <a href="//www.google.com/sitesearch">Google Site Search</a>) and creating the search result display that we wanted.<br /><br />We want to hear from you if you have feedback on Knol search. Please <a href="http://knol.google.com/k/knol/knol/Help" style="color: rgb(85, 26, 139);">leave your comment on our help page</a>. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: </span>Cedric Dupont, Product Manager<br /><span class="byline-author"><br /></span><div style="border-width: 0px; margin: 0px; padding: 0px;"><a href="http://knol.google.com/" title="Knol" style="color: rgb(85, 26, 139);">Knol</a> is a project aimed at helping people share their knowledge<i>. </i>Knols (units of knowledge) are authoritative articles written by people about a specific subject, ranging from <a href="http://knol.google.com/k/noshir-mehta/tooth-pain/iQYfUduC/CE-dcg" title="tooth pain" style="color: rgb(85, 26, 139);">tooth pain</a> to <a href="http://knol.google.com/k/william-pentland/solar-energy/1g0rrsoesmjko/2" title="solar energy" style="color: rgb(85, 26, 139);">solar energy</a> to <a href="http://knol.google.com/k/scott-jenson/buttermilk-pancakes/IMd1ml4q/vzc3bg" title="buttermilk pancakes" style="color: rgb(85, 26, 139);">buttermilk pancakes</a>. With all of these knols to browse, our readers have been begging us for a more powerful search tool. Well, today we have good news - we've added the power of Custom Search to Knol.<br /><br /></div>Custom Search gives us all of the speed and relevance of Google's search technology, but required none of the hard labor that went into making Google search what it is today. With Custom Search, Knol visitors will have a fast search experience that features all of the bells and whistles Google searchers have come to love (including our advanced spell checker). When you search within <a href="http://knol.google.com/" title="Knol" style="color: rgb(85, 26, 139);">Knol</a>, the search results look a little different from Web Search results (see this <a href="http://knol.google.com/k/knol/system/knol/pages/Search?q=knee+surgery&amp;restrict=general&amp;cx=000594330844389129669%3Aqwugul23si0&amp;cof=FORID%3A11&amp;ie=UTF-8" title="search for knee surgery" style="color: rgb(85, 26, 139);">search for knee surgery</a>, for instance). We were able to maintain that distinct feel for Knol search by taking advantage of the Custom Search XML results format (via <a href="//www.google.com/sitesearch">Google Site Search</a>) and creating the search result display that we wanted.<br /><br />We want to hear from you if you have feedback on Knol search. Please <a href="http://knol.google.com/k/knol/knol/Help" style="color: rgb(85, 26, 139);">leave your comment on our help page</a>. <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:Knol - now with Custom Search&url=https://programmablesearchengine.googleblog.com/2008/10/knol-now-with-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/2008/10/knol-now-with-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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/10/knol-now-with-custom-search.html' data-url='https://programmablesearchengine.googleblog.com/2008/10/knol-now-with-custom-search.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/10/knol-now-with-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='3995488590826471270' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/10/synonyms-for-your-custom-search-engine.html' itemprop='url' title='Synonyms for your Custom Search Engine'> Synonyms for your Custom Search Engine </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Friday, October 3, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: </span>Victor Wang and Bartlomiej Niechwiej, Software Engineers<br /><br />With our launch of <a title="Google Site Search" href="http://googleenterprise.blogspot.com/2008/06/super-charging-search-on-your-site-with.html">Google Site Search</a>, we added a new feature to the Custom Search platform: <i>custom synonyms</i>. Here's how this feature can be used to improve the quality of your Custom Search Engine (CSE).<br /><br /><b>How can custom synonyms help?</b><br />Synonyms help by finding documents with relevant <i>related </i>terms and ranking them higher. Synonyms can help to alleviate the mismatch that often occurs between the queries that users type, and the actual words, phrases and concepts used in the documents being searched. Custom Search, of course, automatically takes advantage of <a title="synonyms used in Web search" href="http://googleblog.blogspot.com/2008/07/technologies-behind-google-ranking.html">synonyms used in Google Web search</a>. In addition, Custom Search goes one step further: we allow you to <i>explicitly</i> define custom synonyms that are specific to your web site, community or topic of interest.<br /><br />To illustrate situations where CSE custom synonyms can help, we created 2 CSEs that both search content from the Palo Alto Medical Foundation (PAMF). The <a title="first CSE" href="//www.google.com/coop/cse?cx=008950444667387258161:srwmcwzezec">first CSE</a> does not have custom synonyms enabled, while the <a title="second CSE" href="//www.google.com/coop/cse?cx=008950444667387258161:m9-x6utfc_e">second CSE</a> has a few custom synonyms enabled:<br /><br /><div style="margin-left: 40px;"><b>Terminology: </b>The queries people use sometimes don't match up with the words and phrases used in the content being searched. During allergy season, for example, many people look for information on <i>"hayfever</i>", but the <a title="results without synonyms" href="//www.google.com/cse?cx=008950444667387258161:srwmcwzezec&amp;ie=UTF-8&amp;q=hayfever&amp;sa=Search">results without synonyms</a> aren't that great since the web pages we're searching across don't necessarily use this specific term. However, if the technical phrase <i>"allergic rhinitis"</i> is added as a synonym for <i>"hayfever"</i>, the <a title="results with the synonym" href="//www.google.com/cse?cx=008950444667387258161:m9-x6utfc_e&amp;ie=UTF-8&amp;q=hayfever&amp;sa=Search">results with the synonym</a> are far better.<br /><br /><b>Acronyms:</b> Acronyms often stand for different terms in different contexts. This is especially true within organizations, where acronyms are used frequently. In such cases, it may be possible to improve retrieval via the use of synonyms. Thus, <i>"PAMF"</i> refers to <i>"Palo Alto Medical Foundation"</i>, and adding this synonym improves search results: searching for <i>"PAMF"</i> <a title="without synonyms" href="//www.google.com/custom?hl=en&amp;safe=active&amp;client=google-coop&amp;cof=AH:left;CX:Palo%2520Alto%2520Medical%2520Foundation%2520without%2520Synonyms;L:http://www.google.com/coop/intl/en/images/custom_search_sm.gif;LH:65;LP:1;VLC:%23551a8b;GFNT:%23666666;DIV:%23cccccc;&amp;adkw=AELymgU-gZmyf5tXSGN7Xca-UsPui2rls_z2rmeycMf7yhLd88FbfK5qFg5RdDieSzePhUWZTgpSSE7Kp1gqocfKvP3JbEMlPU4mWB2zV9zl8Y2d9zERrp4&amp;q=PAMF&amp;btnG=Search&amp;cx=008950444667387258161:srwmcwzezec">without synonyms</a> gives only a few relevant results, while the CSE with the synonym returns <a title="more relevant results" href="//www.google.com/custom?hl=en&amp;safe=active&amp;client=google-coop&amp;cof=AH:left;CX:Palo%2520Alto%2520Medical%2520Foundation%2520with%2520Synonyms;L:http://www.google.com/coop/intl/en/images/custom_search_sm.gif;LH:65;LP:1;VLC:%23551a8b;GFNT:%23666666;DIV:%23cccccc;&amp;adkw=AELymgUeEdBinRqXYJni3tv0Q0pvwCaR8gR7kfCBwcDjHUIIIoWBcNg-aDgVWJab0YbWoTVfWSi3CdkfaNdDDwwkUky8Ucskg-Y5lc2Lb57cpc7z3VE8id8&amp;q=PAMF&amp;btnG=Search&amp;cx=008950444667387258161:m9-x6utfc_e">more relevant results</a>.<br /><br /><b>Community:</b> Within specific target user communities, words or phrases have different usage and significance. When a patient is looking for <i>"hearing doctor"</i>, adding the synonym <i>"audiologist"</i> to the CSE provides <a title="much better result" href="//www.google.com/custom?hl=en&amp;safe=active&amp;client=google-coop&amp;cof=AH:left;CX:Palo%2520Alto%2520Medical%2520Foundation%2520with%2520Synonyms;L:http://www.google.com/coop/intl/en/images/custom_search_sm.gif;LH:65;LP:1;VLC:%23551a8b;GFNT:%23666666;DIV:%23cccccc;&amp;adkw=AELymgUeEdBinRqXYJni3tv0Q0pvwCaR8gR7kfCBwcDjHUIIIoWBcNg-aDgVWJab0YbWoTVfWSi3CdkfaNdDDwwkUky8Ucskg-Y5lc2Lb57cpc7z3VE8id8&amp;q=hearing+doctor&amp;btnG=Search&amp;cx=008950444667387258161:m9-x6utfc_e">much better results</a> while the results in the CSE without synonyms <a title="are not optimal" href="//www.google.com/custom?hl=en&amp;safe=active&amp;client=google-coop&amp;cof=AH:left;CX:Palo%2520Alto%2520Medical%2520Foundation%2520without%2520Synonyms;L:http://www.google.com/coop/intl/en/images/custom_search_sm.gif;LH:65;LP:1;VLC:%23551a8b;GFNT:%23666666;DIV:%23cccccc;&amp;adkw=AELymgU-gZmyf5tXSGN7Xca-UsPui2rls_z2rmeycMf7yhLd88FbfK5qFg5RdDieSzePhUWZTgpSSE7Kp1gqocfKvP3JbEMlPU4mWB2zV9zl8Y2d9zERrp4&amp;q=hearing+doctor&amp;btnG=Search&amp;cx=008950444667387258161:srwmcwzezec">are not optimal</a>. Conversely, if a doctor is searching for <i>"somnambulism"</i>, she finds <a title="no results at all" href="//www.google.com/custom?hl=en&amp;safe=active&amp;client=google-coop&amp;cof=AH:left;CX:Palo%2520Alto%2520Medical%2520Foundation%2520without%2520Synonyms;L:http://www.google.com/coop/intl/en/images/custom_search_sm.gif;LH:65;LP:1;VLC:%23551a8b;GFNT:%23666666;DIV:%23cccccc;&amp;adkw=AELymgU-gZmyf5tXSGN7Xca-UsPui2rls_z2rmeycMf7yhLd88FbfK5qFg5RdDieSzePhUWZTgpSSE7Kp1gqocfKvP3JbEMlPU4mWB2zV9zl8Y2d9zERrp4&amp;q=somnambulism&amp;btnG=Search&amp;cx=008950444667387258161:srwmcwzezec"> no results at all</a> in the CSE without synonyms, but <a title="much better results" href="//www.google.com/custom?hl=en&amp;client=google-coop&amp;cof=AH:left;CX:Palo%2520Alto%2520Medical%2520Foundation%2520with%2520Synonyms;L:http://www.google.com/coop/intl/en/images/custom_search_sm.gif;LH:65;LP:1;VLC:%23551a8b;GFNT:%23666666;DIV:%23cccccc;&amp;adkw=AELymgXK8jZQrVjXQCbLxxF7-9uaDXXwGy_WznAfDdaoNYodF2Gn_vp6ZJyBzdvsCRF8sAaN9V8ovWCsYiBu0d5mVmhYemg9ZjOuWHxtgeaU1YpaoEIGIfw&amp;q=somnambulism&amp;btnG=Search&amp;cx=008950444667387258161:m9-x6utfc_e"> much better results</a> via addition of the synonym <i>"sleepwalking"</i> to the CSE. Synonyms can therefore be used to improve the experience of specific classes of users of a web site.<br /></div> <br /><b>How can I add synonyms to my Custom Search Engine?</b><br />The CSE administrator can control the set of synonyms used by uploading a synonym dictionary that is specific to the domain and website. The synonym dictionary can include alternate words or phrases for common search queries. The following steps show how to add the synonyms for the Palo Alto Medical Foundation CSE.<br /><ol><br /><li> Download the existing CSE context file through "Control panel"->Advanced->"Download context"</li><br /><li> Add custom synonyms to your search engine. The synonym dictionary is uploaded as part of the context XML file. Here are the synonyms we added for the above examples:<pre><br />&lt;customsearchengine&gt;<br /> &lt;title&gt;...&lt;/title&gt;<br /> &lt;description&gt;...&lt;/description&gt;<br /> &lt;context&gt;<br /> &lt;backgroundlabels&gt;...&lt;/backgroundlabels&gt;<br /><br /> &lt;synonyms&gt;<br /> &lt;synonymentry word="hearing doctor"&gt;<br /> &lt;synonym&gt;audiologist&lt;/synonym><br /> &lt;/synonymentry&gt;<br /> &lt;synonymentry word="hayfever"&gt;<br /> &lt;synonym&gt;allergic rhinitis&lt;/synonym&gt;<br /> &lt;/synonymentry&gt;<br /> &lt;synonymentry word="somnambulism"&gt;<br /> &lt;synonym&gt;sleepwalking&lt;/synonym&gt;<br /> &lt;/synonymentry&gt;<br /> &lt;synonymentry word="pamf"&gt;<br /> &lt;synonym&gt;Palo Alto Medical Foundation&lt;/synonym&gt;<br /> &lt;/synonymentry&gt;<br /> &lt;/synonyms&gt;<br /><br /> &lt;/context&gt;<br />&lt;/customsearchengine&gt;</pre></li><br /><li>Upload the context file through "Control panel"->Advanced->"Upload context"</li><br /></ol><br /><b>A few notes:</b><br /><ul><br /><li> CSE synonyms are unidirectional, not bidirectional. Thus, a context file with <pre>&lt;synonymentry word="migraine"&gt;&lt;synonym&gt;headache&lt;/synonym&gt;&lt;/synonymentry&gt;</pre> defines <i>"headache"</i> to be a synonym for <i>"migraine"</i>. However, if you also want <i>"migraine"</i> to be considered as a synonym for <i>"headache"</i>, you need to add a separate SynonymEntry to the XML, as follows:<pre><br />&lt;synonymentry word="migraine"&gt;&lt;synonym>headache&lt;/synonym&gt;&lt;/synonymentry&gt;<br />&lt;synonymentry word="headache"&gt;&lt;synonym>migraine&lt;/synonym&gt;&lt;/synonymentry&gt;<br /></pre></li><br /><li>In the current version, the synonym dictionary can only be uploaded/downloaded as a part of the context XML file. We hope to make this much easier in the future.</li><br /><li> We allow up to 500 individual synonyms for a given CSE.</li><br /><li>Each word can have no more than 10 synonyms. If there multiple synonyms, the query will be expanded to include all synonyms uniformly.</li><br /></ul><br />If you are using custom synonyms in your CSE, we hope to get <a title="feedback" href="http://groups.google.com/group/google-custom-search">feedback</a> from you about what improvements we can make. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: </span>Victor Wang and Bartlomiej Niechwiej, Software Engineers<br /><br />With our launch of <a title="Google Site Search" href="http://googleenterprise.blogspot.com/2008/06/super-charging-search-on-your-site-with.html">Google Site Search</a>, we added a new feature to the Custom Search platform: <i>custom synonyms</i>. Here's how this feature can be used to improve the quality of your Custom Search Engine (CSE).<br /><br /><b>How can custom synonyms help?</b><br />Synonyms help by finding documents with relevant <i>related </i>terms and ranking them higher. Synonyms can help to alleviate the mismatch that often occurs between the queries that users type, and the actual words, phrases and concepts used in the documents being searched. Custom Search, of course, automatically takes advantage of <a title="synonyms used in Web search" href="http://googleblog.blogspot.com/2008/07/technologies-behind-google-ranking.html">synonyms used in Google Web search</a>. In addition, Custom Search goes one step further: we allow you to <i>explicitly</i> define custom synonyms that are specific to your web site, community or topic of interest.<br /><br />To illustrate situations where CSE custom synonyms can help, we created 2 CSEs that both search content from the Palo Alto Medical Foundation (PAMF). The <a title="first CSE" href="//www.google.com/coop/cse?cx=008950444667387258161:srwmcwzezec">first CSE</a> does not have custom synonyms enabled, while the <a title="second CSE" href="//www.google.com/coop/cse?cx=008950444667387258161:m9-x6utfc_e">second CSE</a> has a few custom synonyms enabled:<br /><br /><div style="margin-left: 40px;"><b>Terminology: </b>The queries people use sometimes don't match up with the words and phrases used in the content being searched. During allergy season, for example, many people look for information on <i>"hayfever</i>", but the <a title="results without synonyms" href="//www.google.com/cse?cx=008950444667387258161:srwmcwzezec&amp;ie=UTF-8&amp;q=hayfever&amp;sa=Search">results without synonyms</a> aren't that great since the web pages we're searching across don't necessarily use this specific term. However, if the technical phrase <i>"allergic rhinitis"</i> is added as a synonym for <i>"hayfever"</i>, the <a title="results with the synonym" href="//www.google.com/cse?cx=008950444667387258161:m9-x6utfc_e&amp;ie=UTF-8&amp;q=hayfever&amp;sa=Search">results with the synonym</a> are far better.<br /><br /><b>Acronyms:</b> Acronyms often stand for different terms in different contexts. This is especially true within organizations, where acronyms are used frequently. In such cases, it may be possible to improve retrieval via the use of synonyms. Thus, <i>"PAMF"</i> refers to <i>"Palo Alto Medical Foundation"</i>, and adding this synonym improves search results: searching for <i>"PAMF"</i> <a title="without synonyms" href="//www.google.com/custom?hl=en&amp;safe=active&amp;client=google-coop&amp;cof=AH:left;CX:Palo%2520Alto%2520Medical%2520Foundation%2520without%2520Synonyms;L:http://www.google.com/coop/intl/en/images/custom_search_sm.gif;LH:65;LP:1;VLC:%23551a8b;GFNT:%23666666;DIV:%23cccccc;&amp;adkw=AELymgU-gZmyf5tXSGN7Xca-UsPui2rls_z2rmeycMf7yhLd88FbfK5qFg5RdDieSzePhUWZTgpSSE7Kp1gqocfKvP3JbEMlPU4mWB2zV9zl8Y2d9zERrp4&amp;q=PAMF&amp;btnG=Search&amp;cx=008950444667387258161:srwmcwzezec">without synonyms</a> gives only a few relevant results, while the CSE with the synonym returns <a title="more relevant results" href="//www.google.com/custom?hl=en&amp;safe=active&amp;client=google-coop&amp;cof=AH:left;CX:Palo%2520Alto%2520Medical%2520Foundation%2520with%2520Synonyms;L:http://www.google.com/coop/intl/en/images/custom_search_sm.gif;LH:65;LP:1;VLC:%23551a8b;GFNT:%23666666;DIV:%23cccccc;&amp;adkw=AELymgUeEdBinRqXYJni3tv0Q0pvwCaR8gR7kfCBwcDjHUIIIoWBcNg-aDgVWJab0YbWoTVfWSi3CdkfaNdDDwwkUky8Ucskg-Y5lc2Lb57cpc7z3VE8id8&amp;q=PAMF&amp;btnG=Search&amp;cx=008950444667387258161:m9-x6utfc_e">more relevant results</a>.<br /><br /><b>Community:</b> Within specific target user communities, words or phrases have different usage and significance. When a patient is looking for <i>"hearing doctor"</i>, adding the synonym <i>"audiologist"</i> to the CSE provides <a title="much better result" href="//www.google.com/custom?hl=en&amp;safe=active&amp;client=google-coop&amp;cof=AH:left;CX:Palo%2520Alto%2520Medical%2520Foundation%2520with%2520Synonyms;L:http://www.google.com/coop/intl/en/images/custom_search_sm.gif;LH:65;LP:1;VLC:%23551a8b;GFNT:%23666666;DIV:%23cccccc;&amp;adkw=AELymgUeEdBinRqXYJni3tv0Q0pvwCaR8gR7kfCBwcDjHUIIIoWBcNg-aDgVWJab0YbWoTVfWSi3CdkfaNdDDwwkUky8Ucskg-Y5lc2Lb57cpc7z3VE8id8&amp;q=hearing+doctor&amp;btnG=Search&amp;cx=008950444667387258161:m9-x6utfc_e">much better results</a> while the results in the CSE without synonyms <a title="are not optimal" href="//www.google.com/custom?hl=en&amp;safe=active&amp;client=google-coop&amp;cof=AH:left;CX:Palo%2520Alto%2520Medical%2520Foundation%2520without%2520Synonyms;L:http://www.google.com/coop/intl/en/images/custom_search_sm.gif;LH:65;LP:1;VLC:%23551a8b;GFNT:%23666666;DIV:%23cccccc;&amp;adkw=AELymgU-gZmyf5tXSGN7Xca-UsPui2rls_z2rmeycMf7yhLd88FbfK5qFg5RdDieSzePhUWZTgpSSE7Kp1gqocfKvP3JbEMlPU4mWB2zV9zl8Y2d9zERrp4&amp;q=hearing+doctor&amp;btnG=Search&amp;cx=008950444667387258161:srwmcwzezec">are not optimal</a>. Conversely, if a doctor is searching for <i>"somnambulism"</i>, she finds <a title="no results at all" href="//www.google.com/custom?hl=en&amp;safe=active&amp;client=google-coop&amp;cof=AH:left;CX:Palo%2520Alto%2520Medical%2520Foundation%2520without%2520Synonyms;L:http://www.google.com/coop/intl/en/images/custom_search_sm.gif;LH:65;LP:1;VLC:%23551a8b;GFNT:%23666666;DIV:%23cccccc;&amp;adkw=AELymgU-gZmyf5tXSGN7Xca-UsPui2rls_z2rmeycMf7yhLd88FbfK5qFg5RdDieSzePhUWZTgpSSE7Kp1gqocfKvP3JbEMlPU4mWB2zV9zl8Y2d9zERrp4&amp;q=somnambulism&amp;btnG=Search&amp;cx=008950444667387258161:srwmcwzezec"> no results at all</a> in the CSE without synonyms, but <a title="much better results" href="//www.google.com/custom?hl=en&amp;client=google-coop&amp;cof=AH:left;CX:Palo%2520Alto%2520Medical%2520Foundation%2520with%2520Synonyms;L:http://www.google.com/coop/intl/en/images/custom_search_sm.gif;LH:65;LP:1;VLC:%23551a8b;GFNT:%23666666;DIV:%23cccccc;&amp;adkw=AELymgXK8jZQrVjXQCbLxxF7-9uaDXXwGy_WznAfDdaoNYodF2Gn_vp6ZJyBzdvsCRF8sAaN9V8ovWCsYiBu0d5mVmhYemg9ZjOuWHxtgeaU1YpaoEIGIfw&amp;q=somnambulism&amp;btnG=Search&amp;cx=008950444667387258161:m9-x6utfc_e"> much better results</a> via addition of the synonym <i>"sleepwalking"</i> to the CSE. Synonyms can therefore be used to improve the experience of specific classes of users of a web site.<br /></div> <br /><b>How can I add synonyms to my Custom Search Engine?</b><br />The CSE administrator can control the set of synonyms used by uploading a synonym dictionary that is specific to the domain and website. The synonym dictionary can include alternate words or phrases for common search queries. The following steps show how to add the synonyms for the Palo Alto Medical Foundation CSE.<br /><ol><br /><li> Download the existing CSE context file through "Control panel"->Advanced->"Download context"</li><br /><li> Add custom synonyms to your search engine. The synonym dictionary is uploaded as part of the context XML file. Here are the synonyms we added for the above examples:<pre><br />&lt;customsearchengine&gt;<br /> &lt;title&gt;...&lt;/title&gt;<br /> &lt;description&gt;...&lt;/description&gt;<br /> &lt;context&gt;<br /> &lt;backgroundlabels&gt;...&lt;/backgroundlabels&gt;<br /><br /> &lt;synonyms&gt;<br /> &lt;synonymentry word="hearing doctor"&gt;<br /> &lt;synonym&gt;audiologist&lt;/synonym><br /> &lt;/synonymentry&gt;<br /> &lt;synonymentry word="hayfever"&gt;<br /> &lt;synonym&gt;allergic rhinitis&lt;/synonym&gt;<br /> &lt;/synonymentry&gt;<br /> &lt;synonymentry word="somnambulism"&gt;<br /> &lt;synonym&gt;sleepwalking&lt;/synonym&gt;<br /> &lt;/synonymentry&gt;<br /> &lt;synonymentry word="pamf"&gt;<br /> &lt;synonym&gt;Palo Alto Medical Foundation&lt;/synonym&gt;<br /> &lt;/synonymentry&gt;<br /> &lt;/synonyms&gt;<br /><br /> &lt;/context&gt;<br />&lt;/customsearchengine&gt;</pre></li><br /><li>Upload the context file through "Control panel"->Advanced->"Upload context"</li><br /></ol><br /><b>A few notes:</b><br /><ul><br /><li> CSE synonyms are unidirectional, not bidirectional. Thus, a context file with <pre>&lt;synonymentry word="migraine"&gt;&lt;synonym&gt;headache&lt;/synonym&gt;&lt;/synonymentry&gt;</pre> defines <i>"headache"</i> to be a synonym for <i>"migraine"</i>. However, if you also want <i>"migraine"</i> to be considered as a synonym for <i>"headache"</i>, you need to add a separate SynonymEntry to the XML, as follows:<pre><br />&lt;synonymentry word="migraine"&gt;&lt;synonym>headache&lt;/synonym&gt;&lt;/synonymentry&gt;<br />&lt;synonymentry word="headache"&gt;&lt;synonym>migraine&lt;/synonym&gt;&lt;/synonymentry&gt;<br /></pre></li><br /><li>In the current version, the synonym dictionary can only be uploaded/downloaded as a part of the context XML file. We hope to make this much easier in the future.</li><br /><li> We allow up to 500 individual synonyms for a given CSE.</li><br /><li>Each word can have no more than 10 synonyms. If there multiple synonyms, the query will be expanded to include all synonyms uniformly.</li><br /></ul><br />If you are using custom synonyms in your CSE, we hope to get <a title="feedback" href="http://groups.google.com/group/google-custom-search">feedback</a> from you about what improvements we can make. <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:Synonyms for your Custom Search Engine&url=https://programmablesearchengine.googleblog.com/2008/10/synonyms-for-your-custom-search-engine.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/2008/10/synonyms-for-your-custom-search-engine.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/10/synonyms-for-your-custom-search-engine.html' data-url='https://programmablesearchengine.googleblog.com/2008/10/synonyms-for-your-custom-search-engine.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/10/synonyms-for-your-custom-search-engine.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='7776594924671476787' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/09/connecting-with-adobe-community-with.html' itemprop='url' title='Connecting with the Adobe Community with Google Site Search'> Connecting with the Adobe Community with Google Site Search </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Wednesday, September 24, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: Tom Duerig, Software Engineer<br /><br /></span>We love Google Site Search. And when working with our customers, we often discover new and interesting ways to apply our technologies to their business needs.<br /><br />With Adobe's latest launch of <a href="http://tryit.adobe.com/us/cs4/family/?sdid=DOPDS">Creative Suite 4</a>, (which includes some of their most popular desktop applications, such as Adobe InDesign, Illustrator, Photoshop, Dreamweaver and Flash), we had the chance to work with their team to integrate Google Site Search into their product in a way that truly blurs the line between off-line and online content.<br /><br />Adobe is using <a href="//www.google.com/sitesearch">Google Site Search</a> as part of Creative Suite 4's <a href="http://community.adobe.com/help/about.html">Community Help</a> to connect suite customers to Help content on and off Adobe.com, including tutorials, technical support, online product help, videos, articles, tips and techniques, blogs, examples and other resources.<br /><br />In chatting with Adobe Product Manager, Mark Nichoson, we learned that Adobe chose Google Site Search for a variety of reasons. First, we learned that user experience and consistency are essential for Adobe customers. After several studies, the Adobe Creative Suite Team concluded that their customers would use Google Site Search to access information on their products.<br /><br />At the same time, the nature of Adobe Community Help is to align, share and offer the best available information online. Google Site Search allowed this to happen by aggregating more than 4000 URLs coming from the active members of their customer base (bloggers, partners, developers, webmasters and others).<br /><br />This is just one of the ways Google Site Search is connecting customers and their users with the information they need -- whether they're within their applications or on their websites. We can't wait to see what unique Site Search implementations come up next!<br /><br /><span class="byline-author"></span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: Tom Duerig, Software Engineer<br /><br /></span>We love Google Site Search. And when working with our customers, we often discover new and interesting ways to apply our technologies to their business needs.<br /><br />With Adobe's latest launch of <a href="http://tryit.adobe.com/us/cs4/family/?sdid=DOPDS">Creative Suite 4</a>, (which includes some of their most popular desktop applications, such as Adobe InDesign, Illustrator, Photoshop, Dreamweaver and Flash), we had the chance to work with their team to integrate Google Site Search into their product in a way that truly blurs the line between off-line and online content.<br /><br />Adobe is using <a href="//www.google.com/sitesearch">Google Site Search</a> as part of Creative Suite 4's <a href="http://community.adobe.com/help/about.html">Community Help</a> to connect suite customers to Help content on and off Adobe.com, including tutorials, technical support, online product help, videos, articles, tips and techniques, blogs, examples and other resources.<br /><br />In chatting with Adobe Product Manager, Mark Nichoson, we learned that Adobe chose Google Site Search for a variety of reasons. First, we learned that user experience and consistency are essential for Adobe customers. After several studies, the Adobe Creative Suite Team concluded that their customers would use Google Site Search to access information on their products.<br /><br />At the same time, the nature of Adobe Community Help is to align, share and offer the best available information online. Google Site Search allowed this to happen by aggregating more than 4000 URLs coming from the active members of their customer base (bloggers, partners, developers, webmasters and others).<br /><br />This is just one of the ways Google Site Search is connecting customers and their users with the information they need -- whether they're within their applications or on their websites. We can't wait to see what unique Site Search implementations come up next!<br /><br /><span class="byline-author"></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:Connecting with the Adobe Community with Google Site Search&url=https://programmablesearchengine.googleblog.com/2008/09/connecting-with-adobe-community-with.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/2008/09/connecting-with-adobe-community-with.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/09/connecting-with-adobe-community-with.html' data-url='https://programmablesearchengine.googleblog.com/2008/09/connecting-with-adobe-community-with.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/09/connecting-with-adobe-community-with.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='3273862077126132889' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/09/beefed-up-developer-guide.html' itemprop='url' title='Beefed-up developer guide'> Beefed-up developer guide </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Wednesday, September 17, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: </span>Kevin Gargoyle Lim, Technical Writer<br /><br />We've updated the <a title="new developer guide" href="http://code.google.com/apis/customsearch/" id="a4o7">developer guide</a> to include the more advanced Custom Search features, such as <a title="synonym expansion" href="http://code.google.com/apis/customsearch/docs/queries.html#synonyms" id="n2iw">synonym expansion</a> and <a title="Subscribed Links" href="http://code.google.com/apis/customsearch/docs/queries.html#sl" id="d:on">integration with Subscribed Links</a>. These features let you trick out your search engine and give your users a richer search experience. Synonym expansion lets you expand a user's search term (such as "running") to include its variants (such as "jogging" and "sprinting"), so users will not need to search for each variant. Subscribed Links enables you to directly answer your users' questions by promoting a specific result at the top of the results page. You can create your own result text and define sets of queries that would trigger subscribed link results.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6K3RVRCdCLIwwtr_izg119St0mLFcES5JvMbu1etR2fPcutmZ_aobVqbN-eB996g5Lo0SzK2BxXRbCedYeIK9CTh7GBjjftZLWzSj8AGByMnKq1pQ1YfHFTCC0Cw58uKhdDVvKFvDexu0/s1600-h/Subscribed_Links_CSE.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5247071079801110114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6K3RVRCdCLIwwtr_izg119St0mLFcES5JvMbu1etR2fPcutmZ_aobVqbN-eB996g5Lo0SzK2BxXRbCedYeIK9CTh7GBjjftZLWzSj8AGByMnKq1pQ1YfHFTCC0Cw58uKhdDVvKFvDexu0/s400/Subscribed_Links_CSE.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" /></a>The developer guide may not be edge-of-your-seat material, but it does now come with a freebie <a title="glossary" target="_blank" href="http://code.google.com/apis/customsearch/docs/glossary.html" id="w7i:">glossary</a> and a <a title="search gadget" target="_blank" href="//www.google.com/ig/adde?synd=open&amp;source=ggyp&amp;moduleurl=www.google.com/coop/api/013352727693413947710/cse/v3eqetrdocc/gadget" id="qtm_">search gadget</a> that you can add to your <a title="iGoogle page" target="_blank" href="//www.google.com/ig" id="lvqg">iGoogle page</a>. We're still tinkering with the documentation and bulking it up with more juicy tips, so keep coming back to check our progress.<br /><br /><a title="Happy reading" href="http://code.google.com/apis/customsearch/" id="s26q">Happy reading</a>! <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: </span>Kevin Gargoyle Lim, Technical Writer<br /><br />We've updated the <a title="new developer guide" href="http://code.google.com/apis/customsearch/" id="a4o7">developer guide</a> to include the more advanced Custom Search features, such as <a title="synonym expansion" href="http://code.google.com/apis/customsearch/docs/queries.html#synonyms" id="n2iw">synonym expansion</a> and <a title="Subscribed Links" href="http://code.google.com/apis/customsearch/docs/queries.html#sl" id="d:on">integration with Subscribed Links</a>. These features let you trick out your search engine and give your users a richer search experience. Synonym expansion lets you expand a user's search term (such as "running") to include its variants (such as "jogging" and "sprinting"), so users will not need to search for each variant. Subscribed Links enables you to directly answer your users' questions by promoting a specific result at the top of the results page. You can create your own result text and define sets of queries that would trigger subscribed link results.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6K3RVRCdCLIwwtr_izg119St0mLFcES5JvMbu1etR2fPcutmZ_aobVqbN-eB996g5Lo0SzK2BxXRbCedYeIK9CTh7GBjjftZLWzSj8AGByMnKq1pQ1YfHFTCC0Cw58uKhdDVvKFvDexu0/s1600-h/Subscribed_Links_CSE.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5247071079801110114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6K3RVRCdCLIwwtr_izg119St0mLFcES5JvMbu1etR2fPcutmZ_aobVqbN-eB996g5Lo0SzK2BxXRbCedYeIK9CTh7GBjjftZLWzSj8AGByMnKq1pQ1YfHFTCC0Cw58uKhdDVvKFvDexu0/s400/Subscribed_Links_CSE.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" /></a>The developer guide may not be edge-of-your-seat material, but it does now come with a freebie <a title="glossary" target="_blank" href="http://code.google.com/apis/customsearch/docs/glossary.html" id="w7i:">glossary</a> and a <a title="search gadget" target="_blank" href="//www.google.com/ig/adde?synd=open&amp;source=ggyp&amp;moduleurl=www.google.com/coop/api/013352727693413947710/cse/v3eqetrdocc/gadget" id="qtm_">search gadget</a> that you can add to your <a title="iGoogle page" target="_blank" href="//www.google.com/ig" id="lvqg">iGoogle page</a>. We're still tinkering with the documentation and bulking it up with more juicy tips, so keep coming back to check our progress.<br /><br /><a title="Happy reading" href="http://code.google.com/apis/customsearch/" id="s26q">Happy reading</a>! <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:Beefed-up developer guide&url=https://programmablesearchengine.googleblog.com/2008/09/beefed-up-developer-guide.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/2008/09/beefed-up-developer-guide.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/09/beefed-up-developer-guide.html' data-url='https://programmablesearchengine.googleblog.com/2008/09/beefed-up-developer-guide.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/09/beefed-up-developer-guide.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='2895737222498577247' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/09/delivering-custom-search-to-your.html' itemprop='url' title='Delivering Custom Search to your applications'> Delivering Custom Search to your applications </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Tuesday, September 9, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author"></span><span><span>Posted by: Mark Lucovsky, Software Engineer</span></span><br /><br />One of the most exciting things happening with our APIs is the clever use of <a href="//www.google.com/cse">Custom Search</a> engines (CSEs), blended results, and innovative uses of UI components, resulting in rich user experiences. I'd like to highlight a few interesting applications that use the AJAX API with Custom Search, and then illustrate how Custom Search engines are accessed in the <a href="http://code.google.com/apis/ajaxsearch/">AJAX Search API</a>. With a little effort, it is possible to get a very different search experience than the standard iframe version of CSE results to embed into your web site.<br /><br />Over the last couple of weeks, users found interesting information about the U.S. elections and the party conventions at our <a href="//www.google.com/2008election/">2008 U.S. Election</a> page. In the center of the page, there's a page element based on the AJAX API that is designed to deliver a large amount of very specific election-related news and information in a very compact form factor. The tab labeled "Blog Posts" is simply a search on a specific CSE -- the CSE itself is simple, it covers a dozen or so well-read political blogs. This page element demonstrates the ability to deliver this in a very small form factor that's easy to place on any page. You can do a "view source" on the page and you will see what I mean. The AJAX Search API blog provides <a href="http://googleajaxsearchapi.blogspot.com/2008/08/howd-they-do-that.html">more details</a> on how the elections page element, included below, was constructed.<br /><br /><iframe title="In the News" style="border: 0px none ; margin-left: 1em; width: 540px; height: 530px;" src="//www.google.com/uds/gadgets/inthenews/iframe.html" frameborder="0"></iframe><br /><br />Another good example is <a href="http://www.visualdxhealth.com/search.htm?search=melanoma">VisualDx Health</a>. This site delivers health-related information through a very sophisticated CSE. Under the hood, it's a straightforward application that takes advantage of the underlying API. Multiple search requests are fired off in parallel to create this powerful categorized display of results. <a href="http://www.rollingstone.com/search?query=The+Game&amp;type=&amp;search=Search">Rolling Stone</a> takes a similar approach, but this site uses news in addition to multiple CSEs to create a segmented search experience to tailor the content to its specific audience.<br /><br />Let's take a quick look at how CSEs are accessed using the AJAX Search API.<br /><ul><li>Take a plain old web search URL like this</li><br /><ul><li><a href="http://ajax.googleapis.com/ajax/services/search/web?v=1.0&amp;q=barack%20obama">http://ajax.googleapis.com/ajax/services/search/web?v=1.0&amp;q=barack%20obama</a></li></ul><br /><li>Add a new CGI arg called &amp;cx to refer to an existing custom search engine</li><br /><ul><li><a href="http://ajax.googleapis.com/ajax/services/search/web?v=1.0&amp;q=barack%20obama&amp;cx=010222979794876194725:pqldevwuapa">http://ajax.googleapis.com/ajax/services/search/web?v=1.0&amp;q=barack%20obama&amp;cx=010222979794876194725:pqldevwuapa</a></li></ul></ul><br />Check the responses -- it's pretty easy. If you prefer using JavaScript objects, something like this also works:<br /><pre class="code">var search = new google.search.WebSearch();<br />search.setSiteRestriction("010222979794876194725:pqldevwuapa");<br />search.execute("barack obama");<br /></pre>You can dig deeper to view how these applications are built. Using <a href="https://addons.mozilla.org/en-US/firefox/addon/1843">Firebug</a>, you can also take a look at the "Net" tab to focus on the JS request/response stream while performing searches.<br /><br />The AJAX API team is working to deliver Google services through a <a href="http://code.google.com/apis/ajaxsearch/documentation/#fonje">RESTful JSON/JSON-P</a> based system, as well as the large collection of JavaScript classes and high level page elements that developers use to build these very clever sites. The combination of the <a href="http://code.google.com/apis/ajax/">AJAX APIs</a> and <a href="http://code.google.com/apis/customsearch/">CSEs </a>is a pretty powerful system. Learn more by reviewing our documentation and posting questions/suggestions on our <a href="http://groups.google.com/group/Google-AJAX-Search-API">developer forum</a>. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author"></span><span><span>Posted by: Mark Lucovsky, Software Engineer</span></span><br /><br />One of the most exciting things happening with our APIs is the clever use of <a href="//www.google.com/cse">Custom Search</a> engines (CSEs), blended results, and innovative uses of UI components, resulting in rich user experiences. I'd like to highlight a few interesting applications that use the AJAX API with Custom Search, and then illustrate how Custom Search engines are accessed in the <a href="http://code.google.com/apis/ajaxsearch/">AJAX Search API</a>. With a little effort, it is possible to get a very different search experience than the standard iframe version of CSE results to embed into your web site.<br /><br />Over the last couple of weeks, users found interesting information about the U.S. elections and the party conventions at our <a href="//www.google.com/2008election/">2008 U.S. Election</a> page. In the center of the page, there's a page element based on the AJAX API that is designed to deliver a large amount of very specific election-related news and information in a very compact form factor. The tab labeled "Blog Posts" is simply a search on a specific CSE -- the CSE itself is simple, it covers a dozen or so well-read political blogs. This page element demonstrates the ability to deliver this in a very small form factor that's easy to place on any page. You can do a "view source" on the page and you will see what I mean. The AJAX Search API blog provides <a href="http://googleajaxsearchapi.blogspot.com/2008/08/howd-they-do-that.html">more details</a> on how the elections page element, included below, was constructed.<br /><br /><iframe title="In the News" style="border: 0px none ; margin-left: 1em; width: 540px; height: 530px;" src="//www.google.com/uds/gadgets/inthenews/iframe.html" frameborder="0"></iframe><br /><br />Another good example is <a href="http://www.visualdxhealth.com/search.htm?search=melanoma">VisualDx Health</a>. This site delivers health-related information through a very sophisticated CSE. Under the hood, it's a straightforward application that takes advantage of the underlying API. Multiple search requests are fired off in parallel to create this powerful categorized display of results. <a href="http://www.rollingstone.com/search?query=The+Game&amp;type=&amp;search=Search">Rolling Stone</a> takes a similar approach, but this site uses news in addition to multiple CSEs to create a segmented search experience to tailor the content to its specific audience.<br /><br />Let's take a quick look at how CSEs are accessed using the AJAX Search API.<br /><ul><li>Take a plain old web search URL like this</li><br /><ul><li><a href="http://ajax.googleapis.com/ajax/services/search/web?v=1.0&amp;q=barack%20obama">http://ajax.googleapis.com/ajax/services/search/web?v=1.0&amp;q=barack%20obama</a></li></ul><br /><li>Add a new CGI arg called &amp;cx to refer to an existing custom search engine</li><br /><ul><li><a href="http://ajax.googleapis.com/ajax/services/search/web?v=1.0&amp;q=barack%20obama&amp;cx=010222979794876194725:pqldevwuapa">http://ajax.googleapis.com/ajax/services/search/web?v=1.0&amp;q=barack%20obama&amp;cx=010222979794876194725:pqldevwuapa</a></li></ul></ul><br />Check the responses -- it's pretty easy. If you prefer using JavaScript objects, something like this also works:<br /><pre class="code">var search = new google.search.WebSearch();<br />search.setSiteRestriction("010222979794876194725:pqldevwuapa");<br />search.execute("barack obama");<br /></pre>You can dig deeper to view how these applications are built. Using <a href="https://addons.mozilla.org/en-US/firefox/addon/1843">Firebug</a>, you can also take a look at the "Net" tab to focus on the JS request/response stream while performing searches.<br /><br />The AJAX API team is working to deliver Google services through a <a href="http://code.google.com/apis/ajaxsearch/documentation/#fonje">RESTful JSON/JSON-P</a> based system, as well as the large collection of JavaScript classes and high level page elements that developers use to build these very clever sites. The combination of the <a href="http://code.google.com/apis/ajax/">AJAX APIs</a> and <a href="http://code.google.com/apis/customsearch/">CSEs </a>is a pretty powerful system. Learn more by reviewing our documentation and posting questions/suggestions on our <a href="http://groups.google.com/group/Google-AJAX-Search-API">developer forum</a>. <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:Delivering Custom Search to your applications&url=https://programmablesearchengine.googleblog.com/2008/09/delivering-custom-search-to-your.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/2008/09/delivering-custom-search-to-your.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/09/delivering-custom-search-to-your.html' data-url='https://programmablesearchengine.googleblog.com/2008/09/delivering-custom-search-to-your.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/09/delivering-custom-search-to-your.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='6663208873308990777' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/08/creative-uses-of-custom-search.html' itemprop='url' title='Creative uses of Custom Search'> Creative uses of Custom Search </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Monday, August 18, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: Rajat Mukherjee, Group Product Manager and John Skidgel, Senior Interaction Designer<br /><br /></span>If you've been to the <a href="//www.google.com/landing/summergames2008/index.html">2008 Summer Games site</a> that we created to help you stay updated on the happenings in Beijing this month, you'll notice a Custom Search box in the upper right corner that will offer you results from a set of sites that cover the games. This customized search experience is similar to what many of our users have been doing with Custom Search - defining their own slice of the web to search.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigmY5_vLQDyINccZeDOsvol6X_AG_CNC4Zjqi4_pYewivDN0L90ChIEROC1YkBrhV3IRFwb4JMYBXWn1vT2oWuXo5My52uGemFagZtg0Mh_6V1jOSsOb0-mhMnav6LKhFzZSPGGm6LxU8U/s1600-h/olympics.gif"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5235983289874573538" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigmY5_vLQDyINccZeDOsvol6X_AG_CNC4Zjqi4_pYewivDN0L90ChIEROC1YkBrhV3IRFwb4JMYBXWn1vT2oWuXo5My52uGemFagZtg0Mh_6V1jOSsOb0-mhMnav6LKhFzZSPGGm6LxU8U/s400/olympics.gif" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" /></a><br />Since we launched Custom Search, developers have found interesting ways to use the platform and the API (did you see our <a href="http://code.google.com/apis/customsearch/" id="ea-s" title="new developer guide">new developer guide</a>?). One interesting way to build a customized search experience is by using <a href="//www.google.com/coop/docs/cse/cref.html" id="s8jz" title="Linked Custom Search Engines">linked Custom Search Engines</a> (CSEs). With linked CSEs, you can create a dynamically defined search engine that can be updated automatically.<br /><br />A cool application to create a personalized search over your <a title="de.icio.us" href="http://www.delicious.com/" id="ejt7">del.icio.us</a> bookmarks is described in the tutorial <i id="sx1d2"><a href="http://www.readwriteweb.com/archives/build_a_custom_search_engine_using_social_bookmarks.php" id="sx1d3" title="Build a Custom Search Engine using your Social Bookmarks">Build a Custom Search Engine using your Social Bookmarks</a>. </i> You can export your bookmarks to define a CSE and search across all the stuff you care about.<br /><br />Many social bookmarking sites make this kind of application easy to build by providing tools for exporting bookmarks or by listing all bookmarks on one webpage. Other services provide <a href="http://www.techcrunch.com/2008/08/18/delizzy-does-what-delicious-wont-search-the-full-text-of-your-bookmarks/">similar functionality</a>. Here's a screenshot from a <a href="http://gadgets.kbac70.googlepages.com/csebuilder.html" id="raad" title="CSE builder application">CSE builder application</a> that does this.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzTio-zUl0y8Ho3wAoUo-LppieAYU3dr1gMj5Oa3eX6xVl-t4ya7Ezc3k194_P9LwXqRjBpDcLAZ-ryCymEh0DtdW-2XzkCdyDMU-8K_baVG8WqAisbo9q2Z9-r7zuUKND10ia5fQoU5bA/s1600-h/CSE-Bee.gif"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5235983986163247666" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzTio-zUl0y8Ho3wAoUo-LppieAYU3dr1gMj5Oa3eX6xVl-t4ya7Ezc3k194_P9LwXqRjBpDcLAZ-ryCymEh0DtdW-2XzkCdyDMU-8K_baVG8WqAisbo9q2Z9-r7zuUKND10ia5fQoU5bA/s400/CSE-Bee.gif" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" /></a><br /><div id="n4vo1"> You can create a CSE on the fly using the <a href="//www.google.com/coop/cse/onthefly" id="kwbc" title="MakeCSE tool">MakeCSE tool</a>. Provide the URL of a page that has a bunch of hyperlinks and <a href="//www.google.com/coop/docs/cse/tools.html" id="rou3" title="MakeCSE">MakeCSE</a> will extract the links, construct a CSE, and provide you the search results instantly. As the links on the page change, the CSE is automatically updated.<br /><br /></div> Here are a couple of other interesting CSEs:<br /><ul><li>A CSE for your blog. Try out this <a title="Blogger widget" href="http://googleblog.blogspot.com/2007/07/search-your-blog-world.html" id="n-ic">Blogger widget</a> that searches your Blogger blog and blogrolls automatically. </li><li>A CSE that uses our XML API within <a href="http://code.google.com/appengine/" id="p:y0" title="Google App Engine">Google App Engine</a> allows you to <a href="http://www.uxfind.com/" id="b_qg" title="save search results">save search results</a> or email them to friends and manage them in personalized lists. Here's a screenshot from the <a title="UXFind" href="http://www.uxfind.com/" id="ksuj">UXFind</a> application: </li></ul><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXOESga0TTQqqXbPi7Xp8b8vW8QkzzrmhVfILCP0meJ6nYyInpUbiR7_SEGOWKXRdivFtF4T1Mmb0TQodIs9jEIgei0ceBY7_vuKGkha59-H4lMgNJQ58_-GyVajJdZHKE1cXW1sue8Kh1/s1600-h/uxfind-screen-shot.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5235984533389590466" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXOESga0TTQqqXbPi7Xp8b8vW8QkzzrmhVfILCP0meJ6nYyInpUbiR7_SEGOWKXRdivFtF4T1Mmb0TQodIs9jEIgei0ceBY7_vuKGkha59-H4lMgNJQ58_-GyVajJdZHKE1cXW1sue8Kh1/s400/uxfind-screen-shot.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" /></a>Want to build interesting CSEs? Here are a few ideas:<br /><ul><li> CSE for bookmarked URLs that have a particular tag on del.icio.us, for example, <a title="http://delicious.com/tag/photography?setcount=100" href="http://delicious.com/tag/photography?setcount=100http://delicious.com/tag/photography?setcount=100" id="q2wx">http://delicious.com/tag/photography?setcount=100</a>.</li><li>CSE 'for searching pages with links'. This would be great for webpages that have a lot of links, such as the directory category pages on the <a href="http://www.dmoz.org/" id="pl:." title="Open Directory Project">Open Directory Project</a> website.</li><li> CSE that searches across URLs that your friends are embedding in their Twitter messages.</li></ul> <br />Let us know in your <a title="feedback" href="http://groups.google.com/group/google-custom-search" id="ctwv">feedback</a> if you've built interesting tools using the Custom Search platform. We'd also like to hear if there are things we can do to make Custom Search easier to use.<br /><br /><span class="byline-author"></span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: Rajat Mukherjee, Group Product Manager and John Skidgel, Senior Interaction Designer<br /><br /></span>If you've been to the <a href="//www.google.com/landing/summergames2008/index.html">2008 Summer Games site</a> that we created to help you stay updated on the happenings in Beijing this month, you'll notice a Custom Search box in the upper right corner that will offer you results from a set of sites that cover the games. This customized search experience is similar to what many of our users have been doing with Custom Search - defining their own slice of the web to search.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigmY5_vLQDyINccZeDOsvol6X_AG_CNC4Zjqi4_pYewivDN0L90ChIEROC1YkBrhV3IRFwb4JMYBXWn1vT2oWuXo5My52uGemFagZtg0Mh_6V1jOSsOb0-mhMnav6LKhFzZSPGGm6LxU8U/s1600-h/olympics.gif"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5235983289874573538" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigmY5_vLQDyINccZeDOsvol6X_AG_CNC4Zjqi4_pYewivDN0L90ChIEROC1YkBrhV3IRFwb4JMYBXWn1vT2oWuXo5My52uGemFagZtg0Mh_6V1jOSsOb0-mhMnav6LKhFzZSPGGm6LxU8U/s400/olympics.gif" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" /></a><br />Since we launched Custom Search, developers have found interesting ways to use the platform and the API (did you see our <a href="http://code.google.com/apis/customsearch/" id="ea-s" title="new developer guide">new developer guide</a>?). One interesting way to build a customized search experience is by using <a href="//www.google.com/coop/docs/cse/cref.html" id="s8jz" title="Linked Custom Search Engines">linked Custom Search Engines</a> (CSEs). With linked CSEs, you can create a dynamically defined search engine that can be updated automatically.<br /><br />A cool application to create a personalized search over your <a title="de.icio.us" href="http://www.delicious.com/" id="ejt7">del.icio.us</a> bookmarks is described in the tutorial <i id="sx1d2"><a href="http://www.readwriteweb.com/archives/build_a_custom_search_engine_using_social_bookmarks.php" id="sx1d3" title="Build a Custom Search Engine using your Social Bookmarks">Build a Custom Search Engine using your Social Bookmarks</a>. </i> You can export your bookmarks to define a CSE and search across all the stuff you care about.<br /><br />Many social bookmarking sites make this kind of application easy to build by providing tools for exporting bookmarks or by listing all bookmarks on one webpage. Other services provide <a href="http://www.techcrunch.com/2008/08/18/delizzy-does-what-delicious-wont-search-the-full-text-of-your-bookmarks/">similar functionality</a>. Here's a screenshot from a <a href="http://gadgets.kbac70.googlepages.com/csebuilder.html" id="raad" title="CSE builder application">CSE builder application</a> that does this.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzTio-zUl0y8Ho3wAoUo-LppieAYU3dr1gMj5Oa3eX6xVl-t4ya7Ezc3k194_P9LwXqRjBpDcLAZ-ryCymEh0DtdW-2XzkCdyDMU-8K_baVG8WqAisbo9q2Z9-r7zuUKND10ia5fQoU5bA/s1600-h/CSE-Bee.gif"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5235983986163247666" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzTio-zUl0y8Ho3wAoUo-LppieAYU3dr1gMj5Oa3eX6xVl-t4ya7Ezc3k194_P9LwXqRjBpDcLAZ-ryCymEh0DtdW-2XzkCdyDMU-8K_baVG8WqAisbo9q2Z9-r7zuUKND10ia5fQoU5bA/s400/CSE-Bee.gif" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" /></a><br /><div id="n4vo1"> You can create a CSE on the fly using the <a href="//www.google.com/coop/cse/onthefly" id="kwbc" title="MakeCSE tool">MakeCSE tool</a>. Provide the URL of a page that has a bunch of hyperlinks and <a href="//www.google.com/coop/docs/cse/tools.html" id="rou3" title="MakeCSE">MakeCSE</a> will extract the links, construct a CSE, and provide you the search results instantly. As the links on the page change, the CSE is automatically updated.<br /><br /></div> Here are a couple of other interesting CSEs:<br /><ul><li>A CSE for your blog. Try out this <a title="Blogger widget" href="http://googleblog.blogspot.com/2007/07/search-your-blog-world.html" id="n-ic">Blogger widget</a> that searches your Blogger blog and blogrolls automatically. </li><li>A CSE that uses our XML API within <a href="http://code.google.com/appengine/" id="p:y0" title="Google App Engine">Google App Engine</a> allows you to <a href="http://www.uxfind.com/" id="b_qg" title="save search results">save search results</a> or email them to friends and manage them in personalized lists. Here's a screenshot from the <a title="UXFind" href="http://www.uxfind.com/" id="ksuj">UXFind</a> application: </li></ul><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXOESga0TTQqqXbPi7Xp8b8vW8QkzzrmhVfILCP0meJ6nYyInpUbiR7_SEGOWKXRdivFtF4T1Mmb0TQodIs9jEIgei0ceBY7_vuKGkha59-H4lMgNJQ58_-GyVajJdZHKE1cXW1sue8Kh1/s1600-h/uxfind-screen-shot.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5235984533389590466" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXOESga0TTQqqXbPi7Xp8b8vW8QkzzrmhVfILCP0meJ6nYyInpUbiR7_SEGOWKXRdivFtF4T1Mmb0TQodIs9jEIgei0ceBY7_vuKGkha59-H4lMgNJQ58_-GyVajJdZHKE1cXW1sue8Kh1/s400/uxfind-screen-shot.png" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" /></a>Want to build interesting CSEs? Here are a few ideas:<br /><ul><li> CSE for bookmarked URLs that have a particular tag on del.icio.us, for example, <a title="http://delicious.com/tag/photography?setcount=100" href="http://delicious.com/tag/photography?setcount=100http://delicious.com/tag/photography?setcount=100" id="q2wx">http://delicious.com/tag/photography?setcount=100</a>.</li><li>CSE 'for searching pages with links'. This would be great for webpages that have a lot of links, such as the directory category pages on the <a href="http://www.dmoz.org/" id="pl:." title="Open Directory Project">Open Directory Project</a> website.</li><li> CSE that searches across URLs that your friends are embedding in their Twitter messages.</li></ul> <br />Let us know in your <a title="feedback" href="http://groups.google.com/group/google-custom-search" id="ctwv">feedback</a> if you've built interesting tools using the Custom Search platform. We'd also like to hear if there are things we can do to make Custom Search easier to use.<br /><br /><span class="byline-author"></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:Creative uses of Custom Search&url=https://programmablesearchengine.googleblog.com/2008/08/creative-uses-of-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/2008/08/creative-uses-of-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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/08/creative-uses-of-custom-search.html' data-url='https://programmablesearchengine.googleblog.com/2008/08/creative-uses-of-custom-search.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/08/creative-uses-of-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='8660552347167036025' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/06/spanking-new-developer-guide.html' itemprop='url' title='Spanking new developer guide'> Spanking new developer guide </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Wednesday, June 11, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: Kevin Grendelzilla Lim, Technical Writer</span><br /><br />We created a <a href="http://code.google.com/apis/customsearch/">new developer guide</a> from scratch and moved it to <a href="http://code.google.com/more/#products-search-customsearch">code.google.com</a>, where many other API documents reside. This means that the bells and whistles of <a href="http://code.google.com/">Google Code</a> are available to the Custom Search developer guide. For example, you can now search for information across multiple APIs (Not that we're bragging, but Custom Search powers the search on that website).<br /><br />Fine, we'll admit that the new doc is not exactly a-thrill-a-minute, but it's definitely stuffed with more examples (and pretty pictures). The new organization, navigation, and search box make it easier for you to find information. The guide also discusses background information, explains complex concepts, makes recommendations, and points you to the right direction. <br /><br />We're still tinkering with the doc and adding more stuff into it. We'll keep you posted about our progress.<br /><br /><a href="http://code.google.com/apis/customsearch/">Happy reading</a>! <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: Kevin Grendelzilla Lim, Technical Writer</span><br /><br />We created a <a href="http://code.google.com/apis/customsearch/">new developer guide</a> from scratch and moved it to <a href="http://code.google.com/more/#products-search-customsearch">code.google.com</a>, where many other API documents reside. This means that the bells and whistles of <a href="http://code.google.com/">Google Code</a> are available to the Custom Search developer guide. For example, you can now search for information across multiple APIs (Not that we're bragging, but Custom Search powers the search on that website).<br /><br />Fine, we'll admit that the new doc is not exactly a-thrill-a-minute, but it's definitely stuffed with more examples (and pretty pictures). The new organization, navigation, and search box make it easier for you to find information. The guide also discusses background information, explains complex concepts, makes recommendations, and points you to the right direction. <br /><br />We're still tinkering with the doc and adding more stuff into it. We'll keep you posted about our progress.<br /><br /><a href="http://code.google.com/apis/customsearch/">Happy reading</a>! <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:Spanking new developer guide&url=https://programmablesearchengine.googleblog.com/2008/06/spanking-new-developer-guide.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/2008/06/spanking-new-developer-guide.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/06/spanking-new-developer-guide.html' data-url='https://programmablesearchengine.googleblog.com/2008/06/spanking-new-developer-guide.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/06/spanking-new-developer-guide.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='6502286442869263832' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/06/custom-search-at-core-of-google-site.html' itemprop='url' title='Custom Search at the core of Google Site Search'> Custom Search at the core of Google Site Search </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Tuesday, June 3, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: Matt Wytock and Vrishali Wagle, Software Engineers</span><br /><br /> Today, we announced <a href="//www.google.com/sitesearch" id="k.:g" title="Google Site Search">Google Site Search</a>, a hosted website search product that takes advantage of the Custom Search platform to offer high quality search to any website. Google Site Search integrates features that offer site visitors a search experience closer to what they're used to on Google.com. Here are a few of the new features: <ul id="uwe7"><li id="uwe70"> Expanded coverage: We already search through all of your pages that are in the Google.com index. Tell us about more pages on your site by submitting a <a href="https://www.google.com/webmasters/tools/docs/en/protocol.html" id="c_xw" title="Sitemap">Sitemap</a>. We'll crawl your Sitemap and add these pages to your custom search engine so that your search engine has the maximum coverage. (These additional pages will only be available to your custom search engine; your PageRank and Google.com rankings won't change in any way.)</li></ul><ul id="uwe7"><li id="uwe73"> Custom Synonyms: You can now define custom synonyms for your custom search engine. For example, you can define "cd" as meaning"certificate of deposit." When a visitor searches for "cd" on your search engine, we will return pages that contain either "cd" or "certificate of deposit." You can specify these synonyms in the <a href="https://www.google.com/webmasters/tools/docs/en/protocol.html#sitemapXMLFormat" id="wm0f" title="XML definition">XML definition</a> of your search engine.</li></ul><ul id="uwe7"><li id="uwe76"> Date Biasing: Fine-tune the relevance of search results by specifying a bias for newer documents. We allow various levels of biasing, the highest of which approximately sorts by date.</li></ul><ul id="uwe7"><li id="uwe79"> Top Results Biasing: If you want the first N results to always match a refinement, you can specify that as a property of the refinement. We will try to fill up the top N positions with results matching that refinement before showing other relevant results. </li></ul> We're not done with Custom Search and are always thinking about ways to add new features. Stay tuned, as we've only just begun. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: Matt Wytock and Vrishali Wagle, Software Engineers</span><br /><br /> Today, we announced <a href="//www.google.com/sitesearch" id="k.:g" title="Google Site Search">Google Site Search</a>, a hosted website search product that takes advantage of the Custom Search platform to offer high quality search to any website. Google Site Search integrates features that offer site visitors a search experience closer to what they're used to on Google.com. Here are a few of the new features: <ul id="uwe7"><li id="uwe70"> Expanded coverage: We already search through all of your pages that are in the Google.com index. Tell us about more pages on your site by submitting a <a href="https://www.google.com/webmasters/tools/docs/en/protocol.html" id="c_xw" title="Sitemap">Sitemap</a>. We'll crawl your Sitemap and add these pages to your custom search engine so that your search engine has the maximum coverage. (These additional pages will only be available to your custom search engine; your PageRank and Google.com rankings won't change in any way.)</li></ul><ul id="uwe7"><li id="uwe73"> Custom Synonyms: You can now define custom synonyms for your custom search engine. For example, you can define "cd" as meaning"certificate of deposit." When a visitor searches for "cd" on your search engine, we will return pages that contain either "cd" or "certificate of deposit." You can specify these synonyms in the <a href="https://www.google.com/webmasters/tools/docs/en/protocol.html#sitemapXMLFormat" id="wm0f" title="XML definition">XML definition</a> of your search engine.</li></ul><ul id="uwe7"><li id="uwe76"> Date Biasing: Fine-tune the relevance of search results by specifying a bias for newer documents. We allow various levels of biasing, the highest of which approximately sorts by date.</li></ul><ul id="uwe7"><li id="uwe79"> Top Results Biasing: If you want the first N results to always match a refinement, you can specify that as a property of the refinement. We will try to fill up the top N positions with results matching that refinement before showing other relevant results. </li></ul> We're not done with Custom Search and are always thinking about ways to add new features. Stay tuned, as we've only just begun. <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:Custom Search at the core of Google Site Search&url=https://programmablesearchengine.googleblog.com/2008/06/custom-search-at-core-of-google-site.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/2008/06/custom-search-at-core-of-google-site.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/06/custom-search-at-core-of-google-site.html' data-url='https://programmablesearchengine.googleblog.com/2008/06/custom-search-at-core-of-google-site.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/06/custom-search-at-core-of-google-site.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='809440288936719138' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/05/custom-search-expands-to-adsense-for.html' itemprop='url' title='Custom Search expands to AdSense for Search'> Custom Search expands to AdSense for Search </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Tuesday, May 6, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: Vrishali Wagle and Tom Duerig, Software Engineers</span><br /><br />Since the launch of Custom Search, we've seen more and more webmasters, publishers and organizations enable high-quality search engines on their web sites and blogs to help their users find what they're looking for. Thanks to your continuous feedback, we've been able add new features and global support, resulting in even more growth.<br /><br />Now, the Custom Search platform is expanding further by simultaneously improving our indexing for your search engine and broadening our reach to power <a href="//www.google.com/adsense/afs">AdSense for Search</a>. AdSense publishers can now create Custom Search Engines (CSEs) and take advantage of the most popular customization features right within their AdSense accounts.<br /><br />As you may know, Custom Search is built on top of the Google index, which means that pages that are available on Google.com are also available to your search engine. In addition, Custom Search now maintains its own index for enhanced coverage for web sites included in CSEs.<br /><br />If you have pages that aren't currently being indexed in Google.com, you can let us know about these pages by submitting a <a href="//www.google.com/support/webmasters/bin/topic.py?topic=8476">Sitemap </a>through <a href="//www.google.com/webmasters/">Webmaster Tools</a>, and pages in your Sitemap that aren't included in the Google index will be detected and indexed for your search engine. Improved index coverage is not instantaneous as it takes some time for the pages to be crawled and indexed. Please also note that this improved indexing only affects search results within the search engine you create, not your rank and indexing on Google.com.<br /><br />We'd like to welcome all AdSense publishers to the Custom Search community! By growing our community, we're hoping to work with more of you to help users across the web find exactly what they're searching for. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: Vrishali Wagle and Tom Duerig, Software Engineers</span><br /><br />Since the launch of Custom Search, we've seen more and more webmasters, publishers and organizations enable high-quality search engines on their web sites and blogs to help their users find what they're looking for. Thanks to your continuous feedback, we've been able add new features and global support, resulting in even more growth.<br /><br />Now, the Custom Search platform is expanding further by simultaneously improving our indexing for your search engine and broadening our reach to power <a href="//www.google.com/adsense/afs">AdSense for Search</a>. AdSense publishers can now create Custom Search Engines (CSEs) and take advantage of the most popular customization features right within their AdSense accounts.<br /><br />As you may know, Custom Search is built on top of the Google index, which means that pages that are available on Google.com are also available to your search engine. In addition, Custom Search now maintains its own index for enhanced coverage for web sites included in CSEs.<br /><br />If you have pages that aren't currently being indexed in Google.com, you can let us know about these pages by submitting a <a href="//www.google.com/support/webmasters/bin/topic.py?topic=8476">Sitemap </a>through <a href="//www.google.com/webmasters/">Webmaster Tools</a>, and pages in your Sitemap that aren't included in the Google index will be detected and indexed for your search engine. Improved index coverage is not instantaneous as it takes some time for the pages to be crawled and indexed. Please also note that this improved indexing only affects search results within the search engine you create, not your rank and indexing on Google.com.<br /><br />We'd like to welcome all AdSense publishers to the Custom Search community! By growing our community, we're hoping to work with more of you to help users across the web find exactly what they're searching for. <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:Custom Search expands to AdSense for Search&url=https://programmablesearchengine.googleblog.com/2008/05/custom-search-expands-to-adsense-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/2008/05/custom-search-expands-to-adsense-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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/05/custom-search-expands-to-adsense-for.html' data-url='https://programmablesearchengine.googleblog.com/2008/05/custom-search-expands-to-adsense-for.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/05/custom-search-expands-to-adsense-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='5433715569372529809' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/04/searching-for-creative-commons-licensed.html' itemprop='url' title='Searching for Creative Commons licensed content'> Searching for Creative Commons licensed content </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Wednesday, April 23, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: Tania Bedrax-Weiss, Software Engineer</span><br /><br />If you've ever wanted to let your users only see content that is free to use and share (such as through Creative Commons), here are a few tips on how to do it. Assuming you've indicated the CC license in your pages, you can now specify that you want only content with specific licensing terms to show up in your CSE. We've made available four labels for CSE creators to use based on the <a href="http://creativecommons.org/about/license/">CC licenses</a>:<br /><ul><li>free_use_share (by-nc-nd)</li> <li>free_use_share_commercially (by-nd)</li> <li>free_use_share_modify (by-nc-sa)</li> <li>free_use_share_modify_commercially (by-sa)</li></ul>You can either use one of these labels as a background label to restrict all of your content to these terms, or you can reference these labels in the facet items section of the CSE specification and they will be exposed to users as additional refinements in your CSE. Note that these are filter labels; you cannot boost according to these labels.<br /><br />As you generate content, please keep in mind that there are a number of ways Creative Commons licenses may be added to an HTML doc:<br /><ol><li>with &lt;rdf:RDF&gt;...&lt;/rdf:RDF&gt; in the HTML head or body</li><li>using &lt;meta name="DC.rights" content=uri of cc license&gt;</li><li>using &lt;a rel="license" href=uri of cc license&gt;</li><li>using &lt;rdf:RDF&gt;...&lt;/rdf:RDF&gt; in a comment</li></ol>If your documents use any of these methods, we likely already have licensing information. See for example: <a href="http://joshua.smcvt.edu/linearalgebra/">http://joshua.smcvt.edu/linearalgebra/</a> that illustrates method number 3:<pre>&lt;a rel="license" href="http://creativecommons.org/licenses/by-sa/2.5/"&gt; ...</pre>and also illustrates method number 4:<pre>&lt;!-- &lt;rdf:RDF xmlns="http://web.resource.org/cc/" ... &gt;<br />&lt;License rdf:about="http://creativecommons.org/licenses/by-sa/2.5/"&gt;...<br />&lt;/License&gt;<br />&lt;/rdf:RDF&gt; --&gt;</pre>See the file source for the complete text and don't forget to visit our <a href="//www.google.com/webmasters/">Webmaster Central</a> for more information. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: Tania Bedrax-Weiss, Software Engineer</span><br /><br />If you've ever wanted to let your users only see content that is free to use and share (such as through Creative Commons), here are a few tips on how to do it. Assuming you've indicated the CC license in your pages, you can now specify that you want only content with specific licensing terms to show up in your CSE. We've made available four labels for CSE creators to use based on the <a href="http://creativecommons.org/about/license/">CC licenses</a>:<br /><ul><li>free_use_share (by-nc-nd)</li> <li>free_use_share_commercially (by-nd)</li> <li>free_use_share_modify (by-nc-sa)</li> <li>free_use_share_modify_commercially (by-sa)</li></ul>You can either use one of these labels as a background label to restrict all of your content to these terms, or you can reference these labels in the facet items section of the CSE specification and they will be exposed to users as additional refinements in your CSE. Note that these are filter labels; you cannot boost according to these labels.<br /><br />As you generate content, please keep in mind that there are a number of ways Creative Commons licenses may be added to an HTML doc:<br /><ol><li>with &lt;rdf:RDF&gt;...&lt;/rdf:RDF&gt; in the HTML head or body</li><li>using &lt;meta name="DC.rights" content=uri of cc license&gt;</li><li>using &lt;a rel="license" href=uri of cc license&gt;</li><li>using &lt;rdf:RDF&gt;...&lt;/rdf:RDF&gt; in a comment</li></ol>If your documents use any of these methods, we likely already have licensing information. See for example: <a href="http://joshua.smcvt.edu/linearalgebra/">http://joshua.smcvt.edu/linearalgebra/</a> that illustrates method number 3:<pre>&lt;a rel="license" href="http://creativecommons.org/licenses/by-sa/2.5/"&gt; ...</pre>and also illustrates method number 4:<pre>&lt;!-- &lt;rdf:RDF xmlns="http://web.resource.org/cc/" ... &gt;<br />&lt;License rdf:about="http://creativecommons.org/licenses/by-sa/2.5/"&gt;...<br />&lt;/License&gt;<br />&lt;/rdf:RDF&gt; --&gt;</pre>See the file source for the complete text and don't forget to visit our <a href="//www.google.com/webmasters/">Webmaster Central</a> for more information. <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:Searching for Creative Commons licensed content&url=https://programmablesearchengine.googleblog.com/2008/04/searching-for-creative-commons-licensed.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/2008/04/searching-for-creative-commons-licensed.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/04/searching-for-creative-commons-licensed.html' data-url='https://programmablesearchengine.googleblog.com/2008/04/searching-for-creative-commons-licensed.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/04/searching-for-creative-commons-licensed.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='202315369985346566' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/03/labels-in-custom-search.html' itemprop='url' title='Labels in Custom Search'> Labels in Custom Search </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, March 27, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: Phil Liao, Software Engineer</span><br /><br />Last month we demonstrated <a id="gd9n" title="how to specify URL patterns" href="http://googlecustomsearch.blogspot.com/2008/02/specifying-patterns-for-your-custom.html">how to specify URL patterns</a> in your CSE. We now explain another powerful concept in Custom Search: <i id="g.xk">labels</i>, which are also known as <i id="b28y">refinements</i>. Labels are typically displayed above the search results.<br /><div id="lw1w" style="padding: 1em 0pt; text-align: center;"> <div id="cc55" style="padding: 1em 0pt; text-align: center;"><img id="y01x" src="https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_savI843qdFDPMil-96FruF3UYEBmxMqW3n1m1KtSacWjm9qmqMGO5dw9F2azy3mWYIrdpgyaRlwh2-w5XJdqu9ldSlPBMNtKiSl2V0dSP2nB-3ME7xNOO6KQ=s0-d" style="width: 592px; height: 321px;"> </div></div>Let's revisit our <a id="jqap" title="I Love Veggies" href="http://googlecustomsearch.blogspot.com/2008/02/specifying-patterns-for-your-custom.html">I Love Veggies</a> search engine. When the user searches for "eggplant", we display some categorical refinements above her search results such as: <span id="a-6."><i id="cfbu">recipes, nutrition, farmer's markets</i></span>, and <span id="f3nz"><i id="e-qd">growing tips</i></span>. When she clicks the "recipes" refinement, for example, our CSE emphasizes <span id="j48l"><i id="pa7g">eggplant recipes</i></span> in her search results.<br /><br />To make refinements, do the following:<br /><br />1. Create refinement labels.<br /><br />To add a refinement to your custom search engine, go to the <i id="cepy">Refinements</i> tab in the control panel, then click the <i id="blf4">Add Refinement</i> button. Enter a refinement label and its associated keywords, and choose how to prioritize the labeled sites. You can enter one of our <a id="k1ht" title="Existing Search Refinement Labels" href="//www.google.com/coop/docs/cse/labels.html">predefined refinements</a> or create one of your own.<br /><br />2. Tag sites with refinement labels.<br /><br />Once you have configured your refinements, go to the <i id="mif:">Sites</i> tab in the control panel. Choose some sites (URL patterns) using the checkboxes, then choose a label from the <i id="iyq2">Label actions</i> drop-down list. You can attach any number of labels to each site. For example, if a site includes nutritional information with its recipes, you could label it with both the "recipes" and the "nutrition" refinements. Labeling your sites properly enables your users to find sites that are relevant to each refinement. In addition, by showing meaningful labels under each search result, you enable your users to find similar results quickly. The <a id="td81" title="Custom Search Help Center" href="//www.google.com/support/customsearch/">Custom Search Help Center</a> has helpful hints on <a id="c03w" title="What makes a good label?" href="//www.google.com/support/customsearch/bin/answer.py?answer=70361&amp;topic=11498">how to choose good refinements</a>.<br /><div id="dxms" style="padding: 1em 0pt; text-align: left"> <div id="fp:x" style="padding: 1em 0pt; text-align: center;"><img id="pwl5" src="https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_sdLvY0m5qm7AeCUU0_fpuLGPOYi8c_49zufdtrNUnltflwFp_TWeJzxdiscmDnjTPS-YP67fdRCdAwDQGrKQSKATmFTZTVW2DBL4EvB2b-dUe7a5eKckSfz8E=s0-d" style="width: 534px; height: 118px; border: 1px solid black"> </div></div>And this is how to create refinements and assign their labels to your sites using the Custom Search control panel. We'll show you advanced refinement management using XML in another post soon. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: Phil Liao, Software Engineer</span><br /><br />Last month we demonstrated <a id="gd9n" title="how to specify URL patterns" href="http://googlecustomsearch.blogspot.com/2008/02/specifying-patterns-for-your-custom.html">how to specify URL patterns</a> in your CSE. We now explain another powerful concept in Custom Search: <i id="g.xk">labels</i>, which are also known as <i id="b28y">refinements</i>. Labels are typically displayed above the search results.<br /><div id="lw1w" style="padding: 1em 0pt; text-align: center;"> <div id="cc55" style="padding: 1em 0pt; text-align: center;"><img id="y01x" src="https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_savI843qdFDPMil-96FruF3UYEBmxMqW3n1m1KtSacWjm9qmqMGO5dw9F2azy3mWYIrdpgyaRlwh2-w5XJdqu9ldSlPBMNtKiSl2V0dSP2nB-3ME7xNOO6KQ=s0-d" style="width: 592px; height: 321px;"> </div></div>Let's revisit our <a id="jqap" title="I Love Veggies" href="http://googlecustomsearch.blogspot.com/2008/02/specifying-patterns-for-your-custom.html">I Love Veggies</a> search engine. When the user searches for "eggplant", we display some categorical refinements above her search results such as: <span id="a-6."><i id="cfbu">recipes, nutrition, farmer's markets</i></span>, and <span id="f3nz"><i id="e-qd">growing tips</i></span>. When she clicks the "recipes" refinement, for example, our CSE emphasizes <span id="j48l"><i id="pa7g">eggplant recipes</i></span> in her search results.<br /><br />To make refinements, do the following:<br /><br />1. Create refinement labels.<br /><br />To add a refinement to your custom search engine, go to the <i id="cepy">Refinements</i> tab in the control panel, then click the <i id="blf4">Add Refinement</i> button. Enter a refinement label and its associated keywords, and choose how to prioritize the labeled sites. You can enter one of our <a id="k1ht" title="Existing Search Refinement Labels" href="//www.google.com/coop/docs/cse/labels.html">predefined refinements</a> or create one of your own.<br /><br />2. Tag sites with refinement labels.<br /><br />Once you have configured your refinements, go to the <i id="mif:">Sites</i> tab in the control panel. Choose some sites (URL patterns) using the checkboxes, then choose a label from the <i id="iyq2">Label actions</i> drop-down list. You can attach any number of labels to each site. For example, if a site includes nutritional information with its recipes, you could label it with both the "recipes" and the "nutrition" refinements. Labeling your sites properly enables your users to find sites that are relevant to each refinement. In addition, by showing meaningful labels under each search result, you enable your users to find similar results quickly. The <a id="td81" title="Custom Search Help Center" href="//www.google.com/support/customsearch/">Custom Search Help Center</a> has helpful hints on <a id="c03w" title="What makes a good label?" href="//www.google.com/support/customsearch/bin/answer.py?answer=70361&amp;topic=11498">how to choose good refinements</a>.<br /><div id="dxms" style="padding: 1em 0pt; text-align: left"> <div id="fp:x" style="padding: 1em 0pt; text-align: center;"><img id="pwl5" src="https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_sdLvY0m5qm7AeCUU0_fpuLGPOYi8c_49zufdtrNUnltflwFp_TWeJzxdiscmDnjTPS-YP67fdRCdAwDQGrKQSKATmFTZTVW2DBL4EvB2b-dUe7a5eKckSfz8E=s0-d" style="width: 534px; height: 118px; border: 1px solid black"> </div></div>And this is how to create refinements and assign their labels to your sites using the Custom Search control panel. We'll show you advanced refinement management using XML in another post soon. <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:Labels in Custom Search&url=https://programmablesearchengine.googleblog.com/2008/03/labels-in-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/2008/03/labels-in-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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/03/labels-in-custom-search.html' data-url='https://programmablesearchengine.googleblog.com/2008/03/labels-in-custom-search.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/03/labels-in-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='3905563447419084179' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/03/making-most-with-adsense.html' itemprop='url' title='Making the most with AdSense'> Making the most with AdSense </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Tuesday, March 18, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: Talia Brodecki, AdSense Product Marketing</span><br /><br /><div>If you're currently <a id="rmwh" href="//www.google.com/support/customsearch/bin/answer.py?answer=70347&amp;topic=11497" title="making money"><span class="Apple-style-span" style="color: rgb(0, 0, 255);">making money</span></a> from CSE with AdSense, here are a few optimization tips to help you improve your current performance. (If you're not already earning money this way, scroll down to learn more about how you can start doing so, using your search box.) </div> <div> <div> <br /> </div> </div> <blockquote class="webkit-indent-blockquote" style="border: medium none ; margin: 0pt 0pt 0pt 40px; padding: 0px;"> 1) <b>Search box placement:</b> Search boxes should be easy to find, typically under the header or on the left navigation bar, to encourage users to simply search for what they're looking for instead of spending time browsing through your content. Try to keep your search box in the same place on every page so users know where to return for future searches.<br /><br /> 2) <b>Two search boxes per page:</b> For pages with a lot of content, we recommend placing two search boxes per page - one at the top of the page where users can immediately go to to find what they're looking for and one at the bottom of the page where users can quickly search for something else after reading the content on the page. You can track the performance of each by creating a custom channel.<br /><br /> 3) <b>iFRAME: </b>By choosing to host the search results, you can integrate search results and ads within your site so users don't leave your site when they perform a search. If users don't find what they're looking for in the search results, they can easily click to another section of your site through your site's template.<br /><br /> 4) <b>Search box on search results page:</b> Remember to place another search box on your search results page in the case that a user wants to perform another search.<br /><br /> 5) <b>Ad placement:</b> For better monetization, we recommend choosing to place ads at the top &amp; right of the search results for added visibility.<br /><br /> 6) <b>Appearance customization:</b> Customize the search results with your site's colors to match the look and feel. </blockquote> <div> <div> <br /> </div> <div> If you aren't using AdSense, we encourage you to <a title="sign up" href="//www.google.com/adsense" id="g7b9">sign up</a> and get paid for every valid click on ads you're already showing. Just go to the Make Money link in the CSE control panel and fill out the short form to sign up for an account. If you already have an AdSense account, you can easily <a title="link the two" href="//www.google.com/support/customsearch/bin/answer.py?answer=70349&amp;topic=11497" id="d:g4">link the two</a> to start earning money immediately.</div><div><br /></div><div>Now then -- better go figure out what to buy with all that extra cash. ;)<br /></div></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: Talia Brodecki, AdSense Product Marketing</span><br /><br /><div>If you're currently <a id="rmwh" href="//www.google.com/support/customsearch/bin/answer.py?answer=70347&amp;topic=11497" title="making money"><span class="Apple-style-span" style="color: rgb(0, 0, 255);">making money</span></a> from CSE with AdSense, here are a few optimization tips to help you improve your current performance. (If you're not already earning money this way, scroll down to learn more about how you can start doing so, using your search box.) </div> <div> <div> <br /> </div> </div> <blockquote class="webkit-indent-blockquote" style="border: medium none ; margin: 0pt 0pt 0pt 40px; padding: 0px;"> 1) <b>Search box placement:</b> Search boxes should be easy to find, typically under the header or on the left navigation bar, to encourage users to simply search for what they're looking for instead of spending time browsing through your content. Try to keep your search box in the same place on every page so users know where to return for future searches.<br /><br /> 2) <b>Two search boxes per page:</b> For pages with a lot of content, we recommend placing two search boxes per page - one at the top of the page where users can immediately go to to find what they're looking for and one at the bottom of the page where users can quickly search for something else after reading the content on the page. You can track the performance of each by creating a custom channel.<br /><br /> 3) <b>iFRAME: </b>By choosing to host the search results, you can integrate search results and ads within your site so users don't leave your site when they perform a search. If users don't find what they're looking for in the search results, they can easily click to another section of your site through your site's template.<br /><br /> 4) <b>Search box on search results page:</b> Remember to place another search box on your search results page in the case that a user wants to perform another search.<br /><br /> 5) <b>Ad placement:</b> For better monetization, we recommend choosing to place ads at the top &amp; right of the search results for added visibility.<br /><br /> 6) <b>Appearance customization:</b> Customize the search results with your site's colors to match the look and feel. </blockquote> <div> <div> <br /> </div> <div> If you aren't using AdSense, we encourage you to <a title="sign up" href="//www.google.com/adsense" id="g7b9">sign up</a> and get paid for every valid click on ads you're already showing. Just go to the Make Money link in the CSE control panel and fill out the short form to sign up for an account. If you already have an AdSense account, you can easily <a title="link the two" href="//www.google.com/support/customsearch/bin/answer.py?answer=70349&amp;topic=11497" id="d:g4">link the two</a> to start earning money immediately.</div><div><br /></div><div>Now then -- better go figure out what to buy with all that extra cash. ;)<br /></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:Making the most with AdSense&url=https://programmablesearchengine.googleblog.com/2008/03/making-most-with-adsense.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/2008/03/making-most-with-adsense.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/03/making-most-with-adsense.html' data-url='https://programmablesearchengine.googleblog.com/2008/03/making-most-with-adsense.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/03/making-most-with-adsense.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='7265827659080409845' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/03/custom-search-on-google-help-centers.html' itemprop='url' title='Custom Search on Google Help Centers'> Custom Search on Google Help Centers </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Tuesday, March 4, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: Christine Moschella, Online Operations</span><br /><br />Custom Search Engines (CSEs) are powerful tools for searching over the pages of your site, as well as providing links to your favorite resources across the web. Because they provide great search functionality with the option to specify a subset of Google's web index, they're perfect for us to use in our Google Help Centers.<br /><br />We've rolled out CSEs to many of our product Help Centers already, including the <a title="Custom Search Help Center" href="//www.google.com/support/customsearch" id="a.br">Custom Search Help Center</a>, and we're also using it on our <a title="main Google Help page" href="//www.google.com/support" id="ii4-">main Google Help page</a>.<br /><br />The Help Center search engines use several key features of CSEs such as refinements and labels to identify result sources, and Subscribed Links for certain help queries, like <a title="this one" href="//www.google.com/support/googleanalytics/bin/search.py?query=inserting+the+tracking+code&amp;ctx=en:searchbox&amp;Action.Search=Search&amp;hl=en" id="zw5l">this one</a> in the Analytics Help Center.<br /><br />Because Help Center searches will now include content from product pages, developer documentation, Google blogs, and help groups, we hope that search will be an even more effective tool to help you find answers to your Google product questions. For example, failed searches - searches that don't return any results - decreased by 23% on the Analytics Help Center after we added a CSE. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: Christine Moschella, Online Operations</span><br /><br />Custom Search Engines (CSEs) are powerful tools for searching over the pages of your site, as well as providing links to your favorite resources across the web. Because they provide great search functionality with the option to specify a subset of Google's web index, they're perfect for us to use in our Google Help Centers.<br /><br />We've rolled out CSEs to many of our product Help Centers already, including the <a title="Custom Search Help Center" href="//www.google.com/support/customsearch" id="a.br">Custom Search Help Center</a>, and we're also using it on our <a title="main Google Help page" href="//www.google.com/support" id="ii4-">main Google Help page</a>.<br /><br />The Help Center search engines use several key features of CSEs such as refinements and labels to identify result sources, and Subscribed Links for certain help queries, like <a title="this one" href="//www.google.com/support/googleanalytics/bin/search.py?query=inserting+the+tracking+code&amp;ctx=en:searchbox&amp;Action.Search=Search&amp;hl=en" id="zw5l">this one</a> in the Analytics Help Center.<br /><br />Because Help Center searches will now include content from product pages, developer documentation, Google blogs, and help groups, we hope that search will be an even more effective tool to help you find answers to your Google product questions. For example, failed searches - searches that don't return any results - decreased by 23% on the Analytics Help Center after we added a CSE. <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:Custom Search on Google Help Centers&url=https://programmablesearchengine.googleblog.com/2008/03/custom-search-on-google-help-centers.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/2008/03/custom-search-on-google-help-centers.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/03/custom-search-on-google-help-centers.html' data-url='https://programmablesearchengine.googleblog.com/2008/03/custom-search-on-google-help-centers.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/03/custom-search-on-google-help-centers.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='8357587493285641183' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/02/specifying-patterns-for-your-custom.html' itemprop='url' title='Specifying patterns for your Custom Search Engine'> Specifying patterns for your Custom Search Engine </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, February 21, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: Vrishali Wagle, Software Engineer</span><br /><br />Creating a basic Custom Search Engine (CSE) is very easy. You enter a list of sites, select a few basic preferences, and you are done, right? But in fact there's more to Custom Search -- consider it a very powerful way of building your own search engine on top of Google search. You can exclude sites, add labels for drill-down and even change the ranking of results for your search engine. In this blog post, we look at the basic element of Custom Search - <a href="//www.google.com/support/customsearch/bin/answer.py?answer=71826&amp;topic=11493" id="zgyr" target="_blank" title="url patterns">URL patterns</a><br /><br /><a href="//www.google.com/support/customsearch/bin/answer.py?answer=71826&amp;topic=11493" id="zgyr" target="_blank" title="url patterns">URL patterns</a> specify the part of the web you want to search or exclude from your search. Custom Search is based on approximation algorithms that use these patterns to give you your customized results.<br /><br />Consider the "<a href="http://customsearchexamples.googlepages.com/veggie_patterns.xml" id="z6f5" title="&quot;I Love Veggies&quot;">I Love Veggies</a>" search engine that we created. Here's how the "<a href="http://customsearchexamples.googlepages.com/veggie_patterns.xml" id="qh87" title="I Love Veggies">I Love Veggies</a>" search engine made use of patterns effectively:<br /><br /><ul><li> Be very specific. Use the longest possible pattern for specifying a site. For example, in the "I Love Veggies" search engine, we wanted to search all of www.goveg.com, so we added "www.goveg.com/*" as a pattern. But we wanted to search only the vegetarian part of the "allrecipes.com" site. So instead of adding all of "allrecipes.com/*" we added the more specific "allrecipes.com/Recipes/Everyday-Cooking/Vegetarian/*".<br /> </li><li> Specify multiple pages in a site with a "*" at the end of the pattern. If you specify just "www.goveg.com", Custom Search will search just the single page http://www.goveg.com. You need to remember this only if you are write your XML file of annotations directly. If you are using the Control Panel, it automatically adds the "/*" at the end for you, unless you indicate otherwise.<br /> </li><li> Sometimes, you might have a few hosts on a domain with the same path that you want to search. In our example, we wanted to search "mideastfood.about.com/od/vegetarianrecipes/*" and "indianfood.about.com/od/vegetarianrecipes/*". In such a case it is better to specify these patterns individually instead of a very general "*.about.com/od/vegetarianrecipes/*" as more specific the patterns, better the approximation.<span style="color:#ffff00;"><br /> </span> </li><li style="background-color: rgb(255, 255, 255);"> <span style="background-color: rgb(255, 255, 255);" >You can only use the * in the hostname at the beginning of the pattern and it can only represent a full token. For example, "*.about.com/*" is a valid pattern and so is "*.food.about.com/*". However, "*ood.about.com/*" is not valid, nor is "food.*.about.com/*".<br /> </span> </li></ul><br />Keep reading this blog for more tips and tricks as we develop our "<a href="http://customsearchexamples.googlepages.com/veggie_patterns.xml" id="v2yj" title="I Love Veggies">I Love Veggies</a>" search engine. If you have specific questions or feature requests you can visit our <a href="//www.google.com/support/customsearch/" id="vgsa" target="_blank" title="Help Center">Help Center</a> or ask a question on the <a href="http://groups.google.com/group/google-custom-search" id="uisx" target="_blank" title="Discussion group">Discussion group</a>. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: Vrishali Wagle, Software Engineer</span><br /><br />Creating a basic Custom Search Engine (CSE) is very easy. You enter a list of sites, select a few basic preferences, and you are done, right? But in fact there's more to Custom Search -- consider it a very powerful way of building your own search engine on top of Google search. You can exclude sites, add labels for drill-down and even change the ranking of results for your search engine. In this blog post, we look at the basic element of Custom Search - <a href="//www.google.com/support/customsearch/bin/answer.py?answer=71826&amp;topic=11493" id="zgyr" target="_blank" title="url patterns">URL patterns</a><br /><br /><a href="//www.google.com/support/customsearch/bin/answer.py?answer=71826&amp;topic=11493" id="zgyr" target="_blank" title="url patterns">URL patterns</a> specify the part of the web you want to search or exclude from your search. Custom Search is based on approximation algorithms that use these patterns to give you your customized results.<br /><br />Consider the "<a href="http://customsearchexamples.googlepages.com/veggie_patterns.xml" id="z6f5" title="&quot;I Love Veggies&quot;">I Love Veggies</a>" search engine that we created. Here's how the "<a href="http://customsearchexamples.googlepages.com/veggie_patterns.xml" id="qh87" title="I Love Veggies">I Love Veggies</a>" search engine made use of patterns effectively:<br /><br /><ul><li> Be very specific. Use the longest possible pattern for specifying a site. For example, in the "I Love Veggies" search engine, we wanted to search all of www.goveg.com, so we added "www.goveg.com/*" as a pattern. But we wanted to search only the vegetarian part of the "allrecipes.com" site. So instead of adding all of "allrecipes.com/*" we added the more specific "allrecipes.com/Recipes/Everyday-Cooking/Vegetarian/*".<br /> </li><li> Specify multiple pages in a site with a "*" at the end of the pattern. If you specify just "www.goveg.com", Custom Search will search just the single page http://www.goveg.com. You need to remember this only if you are write your XML file of annotations directly. If you are using the Control Panel, it automatically adds the "/*" at the end for you, unless you indicate otherwise.<br /> </li><li> Sometimes, you might have a few hosts on a domain with the same path that you want to search. In our example, we wanted to search "mideastfood.about.com/od/vegetarianrecipes/*" and "indianfood.about.com/od/vegetarianrecipes/*". In such a case it is better to specify these patterns individually instead of a very general "*.about.com/od/vegetarianrecipes/*" as more specific the patterns, better the approximation.<span style="color:#ffff00;"><br /> </span> </li><li style="background-color: rgb(255, 255, 255);"> <span style="background-color: rgb(255, 255, 255);" >You can only use the * in the hostname at the beginning of the pattern and it can only represent a full token. For example, "*.about.com/*" is a valid pattern and so is "*.food.about.com/*". However, "*ood.about.com/*" is not valid, nor is "food.*.about.com/*".<br /> </span> </li></ul><br />Keep reading this blog for more tips and tricks as we develop our "<a href="http://customsearchexamples.googlepages.com/veggie_patterns.xml" id="v2yj" title="I Love Veggies">I Love Veggies</a>" search engine. If you have specific questions or feature requests you can visit our <a href="//www.google.com/support/customsearch/" id="vgsa" target="_blank" title="Help Center">Help Center</a> or ask a question on the <a href="http://groups.google.com/group/google-custom-search" id="uisx" target="_blank" title="Discussion group">Discussion group</a>. <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:Specifying patterns for your Custom Search Engine&url=https://programmablesearchengine.googleblog.com/2008/02/specifying-patterns-for-your-custom.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/2008/02/specifying-patterns-for-your-custom.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/02/specifying-patterns-for-your-custom.html' data-url='https://programmablesearchengine.googleblog.com/2008/02/specifying-patterns-for-your-custom.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/02/specifying-patterns-for-your-custom.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='6175011790759191890' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/02/promoting-useful-information-and-web.html' itemprop='url' title='Promoting useful information and web pages'> Promoting useful information and web pages </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Friday, February 8, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: Rajat Mukherjee, Group Product Manager</span><br /><br />Webmasters often want the ability to promote specific information or web pages when users search for specific things via their Custom Search Engine (CSE).<br />Here are some examples where this is useful:<br /><br />* You have a travel site, and want to draw attention to a spring promotion above the search results for keywords "hawaii", "maui", "kona". You want a nice image of the beach and the three most popular packages listed right on top.<br />* You've created a soccer search engine, and you want soccer fans to quickly get to the results of the Cup of Nations tournament in Ghana for queries [africa], [ghana], and [cup of nations]<br />* Your company just launched a brand new product, and you'd like people to know about it via a headline link to your product blog post when they search for older products in the same category.<br /><br />We've always had the ability to do this in Custom Search (via a feature called Subscribed Links) but now, we've tried to make it a little easier for you.<br /><br />When you go to to the <a href="//www.google.com/coop/manage/cse/">control panel for your CSE</a>, you'll see a new option in the "Preferences" section towards the bottom of the "Basics" tab. Selecting this option will enable your Subscribed Link to be triggered in your CSE for the keywords you've specified. If you don't already have a Subscribed Link defined, you can create one in minutes. Just specify the trigger keywords, the summary text you'd like displayed, and the URL of the target web page when the link is clicked.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKvJj36A0-JvmOuhch3DtOMlxRGwyE1btM-kScI5x18T0NFNDZD4gvKJ3cNgsmyFQs22189PHj-hz_mooobeP5OO2yiCLhDU7jGo-_N8haXJsKVfokDv-TcVeDLZ5SSYxktjfOWcvUWC4/s1600-h/image+1.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5164751062998123202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKvJj36A0-JvmOuhch3DtOMlxRGwyE1btM-kScI5x18T0NFNDZD4gvKJ3cNgsmyFQs22189PHj-hz_mooobeP5OO2yiCLhDU7jGo-_N8haXJsKVfokDv-TcVeDLZ5SSYxktjfOWcvUWC4/s400/image+1.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKsM34QcC1x7aZsDB9ZtSDEiZAVR3EoDzeUfNnhv-QKYFDIXMnBn4ALF5CI5TUEpI-AhYeXTQHbfntBqhdwt0PueC67gV6vl2g1OO4CgJGBJ4REGjzu-oMAkop9T-tUWLlw7FYOk30cN4/s1600-h/img2.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5164751475314983634" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKsM34QcC1x7aZsDB9ZtSDEiZAVR3EoDzeUfNnhv-QKYFDIXMnBn4ALF5CI5TUEpI-AhYeXTQHbfntBqhdwt0PueC67gV6vl2g1OO4CgJGBJ4REGjzu-oMAkop9T-tUWLlw7FYOk30cN4/s400/img2.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" /></a><br />When visitors search on your CSE using the special trigger keywords, your special link will show up right on top of the results, where they won't miss it.<br /><br />You can manage your Subscribed Link via the <a href="//www.google.com/coop/manage/subscribedlinks/">Subscribed Link console</a>. Check the <a href="//www.google.com/coop/docs/cse/cse_advanced_intro.html">developer documentation</a> for advanced options. Remember that subscribed links display differently on your CSE (above the results) versus on Google.com (inline). <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: Rajat Mukherjee, Group Product Manager</span><br /><br />Webmasters often want the ability to promote specific information or web pages when users search for specific things via their Custom Search Engine (CSE).<br />Here are some examples where this is useful:<br /><br />* You have a travel site, and want to draw attention to a spring promotion above the search results for keywords "hawaii", "maui", "kona". You want a nice image of the beach and the three most popular packages listed right on top.<br />* You've created a soccer search engine, and you want soccer fans to quickly get to the results of the Cup of Nations tournament in Ghana for queries [africa], [ghana], and [cup of nations]<br />* Your company just launched a brand new product, and you'd like people to know about it via a headline link to your product blog post when they search for older products in the same category.<br /><br />We've always had the ability to do this in Custom Search (via a feature called Subscribed Links) but now, we've tried to make it a little easier for you.<br /><br />When you go to to the <a href="//www.google.com/coop/manage/cse/">control panel for your CSE</a>, you'll see a new option in the "Preferences" section towards the bottom of the "Basics" tab. Selecting this option will enable your Subscribed Link to be triggered in your CSE for the keywords you've specified. If you don't already have a Subscribed Link defined, you can create one in minutes. Just specify the trigger keywords, the summary text you'd like displayed, and the URL of the target web page when the link is clicked.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKvJj36A0-JvmOuhch3DtOMlxRGwyE1btM-kScI5x18T0NFNDZD4gvKJ3cNgsmyFQs22189PHj-hz_mooobeP5OO2yiCLhDU7jGo-_N8haXJsKVfokDv-TcVeDLZ5SSYxktjfOWcvUWC4/s1600-h/image+1.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5164751062998123202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKvJj36A0-JvmOuhch3DtOMlxRGwyE1btM-kScI5x18T0NFNDZD4gvKJ3cNgsmyFQs22189PHj-hz_mooobeP5OO2yiCLhDU7jGo-_N8haXJsKVfokDv-TcVeDLZ5SSYxktjfOWcvUWC4/s400/image+1.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKsM34QcC1x7aZsDB9ZtSDEiZAVR3EoDzeUfNnhv-QKYFDIXMnBn4ALF5CI5TUEpI-AhYeXTQHbfntBqhdwt0PueC67gV6vl2g1OO4CgJGBJ4REGjzu-oMAkop9T-tUWLlw7FYOk30cN4/s1600-h/img2.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5164751475314983634" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKsM34QcC1x7aZsDB9ZtSDEiZAVR3EoDzeUfNnhv-QKYFDIXMnBn4ALF5CI5TUEpI-AhYeXTQHbfntBqhdwt0PueC67gV6vl2g1OO4CgJGBJ4REGjzu-oMAkop9T-tUWLlw7FYOk30cN4/s400/img2.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" /></a><br />When visitors search on your CSE using the special trigger keywords, your special link will show up right on top of the results, where they won't miss it.<br /><br />You can manage your Subscribed Link via the <a href="//www.google.com/coop/manage/subscribedlinks/">Subscribed Link console</a>. Check the <a href="//www.google.com/coop/docs/cse/cse_advanced_intro.html">developer documentation</a> for advanced options. Remember that subscribed links display differently on your CSE (above the results) versus on Google.com (inline). <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:Promoting useful information and web pages&url=https://programmablesearchengine.googleblog.com/2008/02/promoting-useful-information-and-web.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/2008/02/promoting-useful-information-and-web.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/02/promoting-useful-information-and-web.html' data-url='https://programmablesearchengine.googleblog.com/2008/02/promoting-useful-information-and-web.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/02/promoting-useful-information-and-web.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='3181721311946623568' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://programmablesearchengine.googleblog.com/2008/01/displaying-most-relevant-refinements.html' itemprop='url' title='Displaying the most relevant refinements'> Displaying the most relevant refinements </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Monday, January 7, 2008 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by: Vrishali Wagle, Software Engineer</span><br /><br />Over the past year, a number of you have asked to show only the matching refinements above Custom Search results. Today we're announcing that very feature: You can have as many FacetItems as you like in the <a href="//www.google.com/coop/docs/cse/cse_file.html">XML definition of your CSE</a> and control the number that display on a search page using this feature. Just add a "top_refinements" attribute to your context definition's CustomSearchEngine tag.<br /><br />&lt;CustomSearchEngine top_refinements="n"&gt;<br />&lt;/CustomSearchEngine&gt;<br /><br />Where n is the number of refinements you want to show.<br /><br />For example, consider the context definition of a CSE I created: <a href="http://vrishali.googlepages.com/food_context.xml">http://vrishali.googlepages.com/food_context.xml</a>. It has sixteen FacetItems -- however, the top_refinements is set to 4. This means that it will display the top four matching refinements for every query. Check out the query <a href="//www.google.com/cse?cref=http://vrishali.googlepages.com/food_context.xml&amp;query=chicken">chicken</a>. Observe how the refinements displayed at the top are different for the query <a href="//www.google.com/cse?cref=http://vrishali.googlepages.com/food_context.xml&amp;query=food+safety">food safety</a>.<br /><br />Now consider the default implementation of the same CSE, that is without the top_refinements option: <a href="http://vrishali.googlepages.com/food_context_no_top_refinements.xml">http://vrishali.googlepages.com/food_context_no_top_refinements.xml</a>. All queries in this search engine will display the same refinements, for example <a href="//www.google.com/cse?cref=http://vrishali.googlepages.com/food_context_no_top_refinements.xml&amp;query=chicken">chicken</a> and <a href="//www.google.com/cse?cref=http://vrishali.googlepages.com/food_context_no_top_refinements.xml&amp;query=food+safety">food safety</a>.<br /><br />This feature is enabled for Linked CSEs as well as Google stored CSEs. To use it in your Google Stored CSE, download the context file in the "Advanced" tab of your control panel, add the "top_refinements" attribute to the CustomSearchEngine tag in your XML and upload the modified file.<br /><br />If you don't want to display refinements at the top of the search results, turn them off by setting top_refinements="0". Your search results will still be labeled with the refinements that match.<br /><br />As always, <a href="http://groups.google.com/group/google-custom-search">let us know</a> what you like, or don't like, about this feature! <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by: Vrishali Wagle, Software Engineer</span><br /><br />Over the past year, a number of you have asked to show only the matching refinements above Custom Search results. Today we're announcing that very feature: You can have as many FacetItems as you like in the <a href="//www.google.com/coop/docs/cse/cse_file.html">XML definition of your CSE</a> and control the number that display on a search page using this feature. Just add a "top_refinements" attribute to your context definition's CustomSearchEngine tag.<br /><br />&lt;CustomSearchEngine top_refinements="n"&gt;<br />&lt;/CustomSearchEngine&gt;<br /><br />Where n is the number of refinements you want to show.<br /><br />For example, consider the context definition of a CSE I created: <a href="http://vrishali.googlepages.com/food_context.xml">http://vrishali.googlepages.com/food_context.xml</a>. It has sixteen FacetItems -- however, the top_refinements is set to 4. This means that it will display the top four matching refinements for every query. Check out the query <a href="//www.google.com/cse?cref=http://vrishali.googlepages.com/food_context.xml&amp;query=chicken">chicken</a>. Observe how the refinements displayed at the top are different for the query <a href="//www.google.com/cse?cref=http://vrishali.googlepages.com/food_context.xml&amp;query=food+safety">food safety</a>.<br /><br />Now consider the default implementation of the same CSE, that is without the top_refinements option: <a href="http://vrishali.googlepages.com/food_context_no_top_refinements.xml">http://vrishali.googlepages.com/food_context_no_top_refinements.xml</a>. All queries in this search engine will display the same refinements, for example <a href="//www.google.com/cse?cref=http://vrishali.googlepages.com/food_context_no_top_refinements.xml&amp;query=chicken">chicken</a> and <a href="//www.google.com/cse?cref=http://vrishali.googlepages.com/food_context_no_top_refinements.xml&amp;query=food+safety">food safety</a>.<br /><br />This feature is enabled for Linked CSEs as well as Google stored CSEs. To use it in your Google Stored CSE, download the context file in the "Advanced" tab of your control panel, add the "top_refinements" attribute to the CustomSearchEngine tag in your XML and upload the modified file.<br /><br />If you don't want to display refinements at the top of the search results, turn them off by setting top_refinements="0". Your search results will still be labeled with the refinements that match.<br /><br />As always, <a href="http://groups.google.com/group/google-custom-search">let us know</a> what you like, or don't like, about this feature! <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:Displaying the most relevant refinements&url=https://programmablesearchengine.googleblog.com/2008/01/displaying-most-relevant-refinements.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/2008/01/displaying-most-relevant-refinements.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://programmablesearchengine.googleblog.com/2008/01/displaying-most-relevant-refinements.html' data-url='https://programmablesearchengine.googleblog.com/2008/01/displaying-most-relevant-refinements.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://programmablesearchengine.googleblog.com/2008/01/displaying-most-relevant-refinements.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'> &#59530; </i> </a> <span id='blog-pager-newer-link'> <a class='blog-pager-newer-link' href='https://programmablesearchengine.googleblog.com/search?updated-max=2009-05-26T16:46:00-07:00&max-results=7&reverse-paginate=true' id='Blog1_blog-pager-newer-link' title='Newer Posts'> <i class='material-icons'> &#58820; </i> </a> </span> <span id='blog-pager-older-link'> <a class='blog-pager-older-link' href='https://programmablesearchengine.googleblog.com/search?updated-max=2008-01-07T11:04:00-08:00&max-results=7' id='Blog1_blog-pager-older-link' title='Older Posts'> <i class='material-icons'> &#58824; </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'> &#58055; </i> <h2> Archive </h2> <i class='material-icons arrow'> &#58821; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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 collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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 collapsed'> <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 expanded'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy toggle-open'> <i class='material-icons'> &#58823; </i> &#160; </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 expanded'> <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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </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'] = 'AOuZoY7FNbA8RxT23ICVXR-yyXPm5sIOzQ:1732286376452';_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d4174100360396497591','//programmablesearchengine.googleblog.com/2008/','4174100360396497591'); _WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '4174100360396497591', 'title': 'Programmable Search Engine Blog', 'url': 'https://programmablesearchengine.googleblog.com/2008/', 'canonicalUrl': 'https://programmablesearchengine.googleblog.com/2008/', '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/d78375fb222d99b3', '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': '2008', 'pageTitle': 'Programmable Search Engine Blog: 2008'}}, {'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/2008/', 'type': 'feed', 'isSingleItem': false, 'isMultipleItems': true, 'isError': false, 'isPage': false, 'isPost': false, 'isHomepage': false, 'isArchive': true, 'isLabelSearch': false, 'archive': {'year': 2008, 'rangeMessage': 'Showing posts from 2008'}}}]); _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>

Pages: 1 2 3 4 5 6 7 8 9 10