Google Link shortener with custom social media icons

I am looking to use Google Link shortener with WordPress. I want to use shorter links to help users post more in social media, bitly is far to expensive. Google gives a massive allowance, which want to use. API key is available but need to implement using php prior WordPress rendering the page.

Current Code

Read More
<a rel="nofollow" href="http://www.facebook.com/sharer.php?u=<?php the_permalink();?>&amp;t=<?php echo urlencode(get_the_title($id)); ?>" title="Share this post on Facebook">
	<img src="<?php echo get_template_directory_uri(); ?>/images/facebook.png" border="0" alt="Facebook"/>
</a>
<a rel="nofollow" href="http://twitter.com/home?status=<?php echo urlencode("Currently reading: "); ?><?php the_permalink(); ?>" title="Share this article with your Twitter followers">
	<img src="<?php echo get_template_directory_uri(); ?>/images//twitter.png" border="0" alt="Twitter"/>
</a>
<a href="https://plus.google.com/share?url=<?php the_permalink(); ?>" title="Share this on Google+">
	<img src="<?php echo get_template_directory_uri(); ?>/images/google_plusone_share.png" border="0" alt="Google+"/>
</a>

To summarise I need a example of how to enforce Google link shortener API while using the in built functions such as:

the_permalink();

Many thanks.

Related posts

3 comments

  1. You dont want to hook into the_permalink, else every internal page link that uses it will be routed via google, which is obviously a bad idea.

    Instead create a new function to return the shortened link:

    //wrapper function to echo the result, consistent with WordPress the_* and get_the_* style
    function the_google_short_link(){
        echo get_the_google_short_link();
    }
    
    function get_the_google_short_link(){
        // Google::shortlink is an example, replace with whatever code you have that creates the shortlink
        return Google::shortLink(get_permalink(get_the_ID())); 
    }
    

    then use in your templates are required:

    <a rel="nofollow" href="http://www.facebook.com/sharer.php?u=<?php the_google_short_link();?>&amp;t=<?php echo urlencode(get_the_title($id)); ?>" title="Share this post on Facebook">
        <img src="<?php echo get_template_directory_uri(); ?>/images/facebook.png" border="0" alt="Facebook"/>
    </a>
    
  2. You’ll need to use add_filter('the_permalink','your_custom_function'); to customize the output of the permalink.

    Rough outline of your_custom_function:

    function your_custom_function($url){
      // Get your token (if you use OAuth)
    
      // Send your long url with the [HTTP API][1]
    
      // return the short url you got.
    }
    

    Also see Steve’s Answer why you don’t want to implement it through the_permalink

  3. Use this class to talk with the google api and the goo.gl shortener service:

    <?php
    
    /**
    * This file is part of googl-php
    *
    * https://github.com/sebi/googl-php
    *
    * googl-php is free software: you can redistribute it and/or modify
    * it under the terms of the GNU General Public License as published by
    * the Free Software Foundation, either version 3 of the License, or
    * (at your option) any later version.
    *
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    *
    * You should have received a copy of the GNU General Public License
    * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    */
    
    class mashsuGoogl
    {
        public $extended;
        private $target;
        private $apiKey;
        private $ch;
    
        private static $buffer = array();
    
        function __construct($apiKey = null) {
            # Extended output mode
            $extended = false;
    
            # Set Google Shortener API target
            $this->target = 'https://www.googleapis.com/urlshortener/v1/url?';
    
            # Set API key if available
            if ( $apiKey != null ) {
                $this->apiKey = $apiKey;
                $this->target .= 'key='.$apiKey.'&';
            }
    
            # Initialize cURL
            $this->ch = curl_init();
            # Set our default target URL
            curl_setopt($this->ch, CURLOPT_URL, $this->target);
            # We don't want the return data to be directly outputted, so set RETURNTRANSFER to true
            curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
        }
    
        public function shorten($url, $extended = false) {
    
            # Check buffer
            if ( !$extended && !$this->extended && !empty(self::$buffer[$url]) ) {
                return self::$buffer[$url];
            }
    
            # Payload
            $data = array( 'longUrl' => $url );
            $data_string = '{ "longUrl": "'.$url.'" }';
    
            # Set cURL options
            curl_setopt($this->ch, CURLOPT_POST, count($data));
            curl_setopt($this->ch, CURLOPT_POSTFIELDS, $data_string);
            curl_setopt($this->ch, CURLOPT_HTTPHEADER, Array('Content-Type: application/json'));
    
            if ( $extended || $this->extended) {
                return json_decode(curl_exec($this->ch));
            } else {
    
                            if (isset(json_decode(curl_exec($this->ch))->id)){
                                $ret = json_decode(curl_exec($this->ch))->id;
                                self::$buffer[$url] = $ret;
                                return $ret;
                            }
                            return '';
    
            }
        }
    
        public function expand($url, $extended = false) {
            # Set cURL options
            curl_setopt($this->ch, CURLOPT_HTTPGET, true);
            curl_setopt($this->ch, CURLOPT_URL, $this->target.'shortUrl='.$url);
    
            if ( $extended || $this->extended ) {
                return json_decode(curl_exec($this->ch));
            } else {
                return json_decode(curl_exec($this->ch))->longUrl;
            }
        }
    
            public function checkApiKey($url, $extended = true) {
    
            # Check buffer
            if ( !$extended && !$this->extended && !empty(self::$buffer[$url]) ) {
                return self::$buffer[$url];
            }
    
                    # Payload
            $data = array( 'longUrl' => $url );
            $data_string = '{ "longUrl": "'.$url.'" }';
    
            # Set cURL options
            curl_setopt($this->ch, CURLOPT_POST, count($data));
            curl_setopt($this->ch, CURLOPT_POSTFIELDS, $data_string);
            curl_setopt($this->ch, CURLOPT_HTTPHEADER, Array('Content-Type: application/json'));
    
            if ( $extended || $this->extended) {
                return json_decode(curl_exec($this->ch), true);
            } else {
                $ret = json_decode(curl_exec($this->ch))->id;
                self::$buffer[$url] = $ret;
                return $ret;
            }
        }
    
        function __destruct() {
            # Close the curl handle
            curl_close($this->ch);
            # Nulling the curl handle
            $this->ch = null;
        }
    }
    
    ?>   
    

    Here is a short function to return the goo.gl link

    function GetShortURL( $url ){
        global $post;
    
        $appid = '1234567...'; // your app id
    
    
            $shorturl = new mashsuGoogl($appid);
            $shorturlres = $shorturl->shorten($url, false);
    
        // Shorten URL
        return $shorturlres;
        unset($googl);
        }
    

Comments are closed.