For many reasons, not least of which their decision to appoint a surveillance loving war criminal to their board of directors, I’ve been steadily migrating away from Dropbox.

Thankfully, there is a drop-in replacement for much of it, providing you run your own server. So, I’ve got a syncing file store/backup running across my devices, which can be accessed while I’m on the go as well.

However, one of the things I do use dropbox for (which is not terribly important in the grand scheme of things, but which I find quite useful) is, via the use of an IFTTT rule, to take a copy of any photos I’m tagged in on Facebook, so that I can see them (and to break them out of the silo) without actually having to go onto Facebook. This is possible using dropbox, owing to it being a centralised service, but obviously isn’t possible using your own server.

Webhooks to the rescue!

So a little while ago I put together a hack that used IFTTT’s wordpress channel to add a pluggable webhooks interface to IFTTT.

Since this tool supports plugins, I was therefore able to write a simple Facebook adapter which, when triggered would extract the image URL from the push message and then simply download it.

Since my owncloud install was on the same server, all I had to do was output this file to the appropriate owncloud data directory and any files retrieved are automatically synced to your client devices. You can of course opt to write to any directory, and not use owncloud at all, but since I wanted a like for like replacement for IFTTT+Dropbox I went for owncloud server storage!

Here’s the facebookphoto.php plugin code:

]*src *= *["\']?([^"\']*)/', $object->description, $matches))
                {
                        $url = $matches[1];

                        $parsed = parse_url($url);

                        if ($object->pass == $this->expected_password) {
                        
                                $filename = basename($parsed['path']);

                                file_put_contents($this->owncloud_path.$filename, file_get_contents($url));
                        }
                }
            
            return $object;
        }
    }

Simple, and obviously you could extend this to do other things with it.

Place the code in your plugins directory, and create a new recipe on ifttt triggering your plugin whenever you’re tagged on Facebook, remembering to pass plugin:FacebookPhoto as your category.

» Visit the Ifttt webhook project on github...

6 thoughts on “Backing up Facebook tagged photos to @ownCloud using @IFTTT

  1. Following on from my last post about saving Facebook tagged photos to ownCloud, here’s a plugin that addresses my Flickr favourites rule.
    This plugin, when set up on IFTTT, will use exactly the same mechanism to save any public photos I tag as a favourite on Flickr to my owncloud folder.
    Here’s my flickrfaves.php



    <?php
    class FlickrFaves extends Plugin {

    private $owncloud_path = ‘/path/to/owncloud/server/data/user/files/Ifttt/Flickr/’;
    private $expected_password = ‘passwordforwordpresschannel’;

    public function execute($plugin, $object, $raw) {

    if (preg_match(‘/< *img[^>]*src *= *[“‘]?([^”‘]*)/’, $object->description, $matches))
    {
    $url = $matches[1];

    $parsed = parse_url($url);

    if ($object->pass == $this->expected_password) {

    $filename = basename($parsed[‘path’]);

    file_put_contents($this->owncloud_path.$filename, file_get_contents($url));
    }
    }

    return $object;
    }
    }


    12345678910111213141516171819202122232425

    <?php    class FlickrFaves extends Plugin {                private $owncloud_path = ‘/path/to/owncloud/server/data/user/files/Ifttt/Flickr/’;        private $expected_password = ‘passwordforwordpresschannel’;         public function execute($plugin, $object, $raw) {                 if (preg_match(‘/< *img[^>]*src *= *[“‘]?([^”‘]*)/’, $object->description, $matches))                {                        $url = $matches[1];                         $parsed = parse_url($url);                         if ($object->pass == $this->expected_password) {                                                        $filename = basename($parsed[‘path’]);                                 file_put_contents($this->owncloud_path.$filename, file_get_contents($url));                        }                }                        return $object;        }    }


    Share this:EmailLinkedInTwitterGoogleFacebookReddit

  2. How I only just came across your work is beyond me. I love IFTTT and have been using it for a while, albeit not to the extent and detail you are here and with the previous hack which is genius but I am yet to put to work yet. I still think it is pretty dumb that they haven’t added a native channel for webhooks yet, with its global and broad appeal and compatibility surely it would be a no brainer? Make it as easy as possible for users. I like that Trello has a channel now and can see a lot of ways to use webhooks with that, especially with say WooCommerce, and use webhooks from that tool to create a new card in Trello for each order.

Leave a Reply