justb3a

Module: Instagram Feed

Recommended Posts

Represents the instagram feed of a user.

Instructions:

  1. Register a new instagram Client: at instagram. It's really important to add the current url as redirect url. (For example "http://page.dev/processwire/module/edit?name=InstagramFeed/").
  2. Complete module settings (Client ID and Secret), leaving the access input token field empty. This value will be generated.
  3. Click the "get Access Token" link to generate code and access token in module settings.
  4. Configure username to output feed from (default setting is "self":  to get the most recent media published by the owner of the access token)
  5. ... and use it!

detailed instructions at github

  • Like 13
  • Thanks 1

Share this post


Link to post
Share on other sites

Hey this looks great! I have one recommendation that you might want to consider, I didn't see anything that caches the json array that you get back. I had an issue with a site a while back where periodically due to the server having to make a round trip to the instagram api every load the rest of the page would hang a bit. Not really an issue if you are using something like procache, but maybe a cache option might be a good idea for a configurable option . Just a thought. :)

  • Like 1

Share this post


Link to post
Share on other sites

@MuchDev: Thanks, this is really a good hint.  Do you have any suggestions how best to tackle this issue?  ;)

Share this post


Link to post
Share on other sites

I used an article on stack overflow, I think it was this post: 

http://stackoverflow.com/questions/20558078/caching-instagram-api-requests-using-php

I don't think I had to do too much. I didn't end up using markup cache as you could I just cached the file to a static directory in my cache folder. You can see in the script where you could parameterize your settings in. Good luck . :)

Share this post


Link to post
Share on other sites

Yeah good point there is that too. I think why I used that was in debugging, having direct access to the file made it easier to just delete it and have it re-cache, also I got to play around with some bare metal php.

Share this post


Link to post
Share on other sites

My first site with PW has an Instagram feed coded in the most horrible way haha, just like, plugged in from everywhere because I didn´t understand much of PW modules (I think I still don´t haha).

I did resolve the caching issue just by saving the response in a file (though using file_put_content and stuff like that, no fancy PW functionalities, not even saving it inside the cache folder!!) , and also managed to make an ajax call to keep calling more images with the pagination API (that would be really nice to have in the module also!). With each new call, I updated the cache file list of image data and substituted the next pagination id.

Some of my doubs is if suddenly a big cache file could turn troublesome and also I don´t really get how you could call a module function from an AJAX call, like, do you use an URL?

Anyway, thanks for this nice module!

Share this post


Link to post
Share on other sites

Thanks for all your input! I decided to use the built-in WireCache functionality.

v0.0.2

(module settings)

Cache Expire: By default a cache lasts for one day but you can select another lifetime:

  • ... hourly, daily, weekly, monthly
  • ... never, to prevent expiration
  • ... save, to expire when any page or template is saved
  • by clicking the link below all module caches will be deleted
 
  • Like 4

Share this post


Link to post
Share on other sites

THANKS!

Tried it and seem to be getting strange results, sometimes the images appear and sometimes not - bottom of this page: http://www.benbyford.com/about/

Is there a problem with Instagram connection or caching or something?

<?php
    $feed = $modules->get('InstagramFeed')->getRecentMedia();
    foreach ($feed as $image): ?>
        <a href="<?=$image['link']; ?>" class="instagram-item">
            <img src="<?=$image['images']['thumbnail']['url']; ?>" alt="">
        </a>
        <div class="hidden">
        </div>
    <?php endforeach; ?>

Share this post


Link to post
Share on other sites

@benbyf: which ProcessWire version are you using? What’s your cache setting in module settings? What happens if you disable caching (set it to “now”). If caching is enabled, have a look at your database table caches. There should be an entry named module.instagramfeed-recentmedia. Is the depending “data” field filled? There should be json including your requested images.

Share this post


Link to post
Share on other sites

it's strange as it worked then didnt.

no template cache, module cache set to "never" (couldnt see "now" as an option)

Share this post


Link to post
Share on other sites

also i've found data in the module in the DB, my module settings

Share this post


Link to post
Share on other sites

Which ProcessWire version are you using? Have a look at your database table caches. There should be an entry named module.instagramfeed-recentmedia. Is the depending “data” field filled? There should be json including your requested images.

Have a look at the ProcessWire error log, if something went wrong while authentification / receiving access token there should be an entry. 

In your instagram client settings, did you activate "Enforce signed requests" (this checkbox must be unchecked!). 

In module settings is there an access token?

Clear the cache for this module in module settings.

Make sure you have the username spelled correctly or leave it empty (default: self).

I receive your media without any problem:

post-2759-0-34846100-1444628970_thumb.pn

Share this post


Link to post
Share on other sites

Hello,

thanks for the Module.

is it possible to add also feed by hashtag ?

Thanks

Share this post


Link to post
Share on other sites

I added this endpoint, could you please pull develop branch and test it? 

Get a list of recently tagged media
  • getRecentMediaByTag($tagname)
<?php $feed = $modules->get('InstagramFeed')->getRecentMediaByTag('processwire'); ?>

post-2759-0-58186600-1449818035_thumb.pn

  • Like 2

Share this post


Link to post
Share on other sites

Wow that was fast :) 

For the first time it works currently for me  :frantics: 

Thank you. 

I will test it out on the weekend

Share this post


Link to post
Share on other sites

whats the intagram strategy, its like they're locking it down more and more with the new approval process and new sandbox mode. https://www.instagram.com/developer/sandbox/

also do you create one client, or multiple clients - new one for each site? If multiple its almost impossible to do as each time you have to setup, submit to approve with instagram (including a step that asks you to submit a video of how your using instagram...) and wait.

:( boo instagram boo!

Share this post


Link to post
Share on other sites

Hello, 

is it possible to set more than one hashtag and set limit for the page ?  My idea is to inegrate it in a blog. and only e.G. 4 last pics with hashtags should be visible on the current post.

maybe something like

<?php $feed = $modules->get('InstagramFeed')->getRecentMediaByTag('processwire, cms'); ?> 

Thanks  

Share this post


Link to post
Share on other sites

@iNoize: I cannot find an instagram api endpoint which supports more than one tag. If you're not able to get your request fullfilled by using the official instagram app or website, it won't work in most cases.

Share this post


Link to post
Share on other sites

whats the intagram strategy, its like they're locking it down more and more with the new approval process and new sandbox mode. https://www.instagram.com/developer/sandbox/

also do you create one client, or multiple clients - new one for each site? If multiple its almost impossible to do as each time you have to setup, submit to approve with instagram (including a step that asks you to submit a video of how your using instagram...) and wait.

:( boo instagram boo!

this still the case or am i missing something?

Share this post


Link to post
Share on other sites

this still the case or am i missing something?

I have to say that I personally don't use instagram. I just created an account to develop this module which I needed for a client project.  :P

Share this post


Link to post
Share on other sites

First of all, great plugin!

Two questions:

— Is there a way to update the cache every 60 seconds?

— Is it possible to access the "high_resolution" endpoints, even though they aren't already implemented in instagram API (files are there but not implemented)?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Soma
      LogMaintenance
      A simple ProcessWire module to give some maintenance control over log files. I found myself often having lots of log files for different things that can grow more or less quickly to a size where they can be difficult to maintain. The built in Logger of PW does a good job of giving you the possibility to delete or prune logs. But it has to be done manually and sometimes a log grows into millions of lines, which makes it often impossible to even prune it as it's too large.
      LogMaintenance uses LazyCron to run the maintenance task and there's several settings you can setup on a global or per log basis.
      Archive: will create zip files for each log file in logs/archive/ folder and add the log each time the maintenance is run to a subfolder containing the datetime.
      Lines: keeps logs to a certain number of lines 
      Days: keeps the log to a certain number of days
      Bytes: keeps the log to a certain amount of bytes
      Each setting is checked from top down, the first setting to contain something is used. So if you check the "Archive" option, all other settings are ignored and logs are archived everytime the LazyCron is executed. If you want to keep your logs to a certain amount of bytes just leave all other settings to 0 or blank.
      Per Log Settings
      There's a textarea that you can use to setup a config for a specific log file one per line. All the logs you define here ignore the global settings above. The syntax for the settings is:
      logname:[archive]:[lines]:[days]:[bytes] 
      errors:1:0:0:0 // would archive the errors log messages:0:10000:0:0 // will prune the errors log to 10000 lines  
      The module can be found on github for you to check out. It's still fresh and I'm currently testing.
      https://github.com/somatonic/LogMaintenance
    • By teppo
      Fieldtype Page IDs is a third party Fieldtype that, simply put, stores Page references as integers (Page IDs).
      This fieldtype was built as a quick and dirty workaround for Page Reference fields' inability handle self-references due to circular reference issues. A project I've been working on for a while now includes a combination of RepeaterMatrix content blocks and tagging/categorization system that would've resulted in a lot of duplicate pages (and plenty of unnecessary manual work for content editors) had I used built-in Page Reference fields, and thus a new Fieldtype felt like the most sensible approach.
      Fieldtype Page IDs was designed to be loosely compatible with Page References in order to make conversions between the two feasible, but it is quite limited feature wise:
      largely due to the fact that stored values are actually just integers with no connection to Pages whatsoever some advanced selectors and related features are not supported, and page values can't be directly accessed configuration settings are limited to the bare essentials (selector string and Inputfield class) only a handful of Inputfields (AsmSelect, Checkboxes, Text) are (currently) supported Anyway, in case you need to store Page IDs (and Page IDs only) and are happy with the limitations mentioned above, feel free to give this Fieldtype a try. It has been working fine for me in one particular project, but hasn't been tested that much, so please tread carefully – and let me know if you run into any issues.
      GitHub repository: https://github.com/teppokoivula/FieldtypePageIDs
      Modules directory: https://modules.processwire.com/modules/fieldtype-page-ids/
    • By daniels
      This is a lightweight alternative to other newsletter & newsletter-subscription modules.
      You can find the Module in the Modules directory and on Github
      It can subscribe, update, unsubscribe & delete a user in a list in Mailchimp with MailChimp API 3.0. It does not provide any forms or validation, so you can feel free to use your own. To protect your users, it does not save any user data in logs or sends them to an admin.
      This module fits your needs if you...
      ...use Mailchimp as your newsletter / email-automation tool ...want to let users subscribe to your newsletter on your website ...want to use your own form, validation and messages (with or without the wire forms) ...don't want any personal user data saved in any way in your ProcessWire environment (cf. EU data regulation terms) ...like to subscribe, update, unsubscribe or delete users to/from different lists ...like the Mailchimp UI for creating / sending / reviewing email campaigns *I have only tested it with PHP 7.x so far, so use on owners risk
      EDIT:
      I've updated the module to 0.0.4. I removed the instructions from this forum, so I don't have to maintain it on multiple places. Just checkout the readme on github 🙂
      If you have questions or like to contribute, just post a reply or create an issue or pr on github. 
    • By bernhard
      WHY?
      This module was built to fill the gap between simple $pages->find() operations and complex SQL queries.
      The problem with $pages->find() is that it loads all pages into memory and that can be a problem when querying multiple thousands of pages. Even $pages->findMany() loads all pages into memory and therefore is a lot slower than regular SQL.
      The problem with SQL on the other hand is, that the queries are quite complex to build. All fields are separate tables, some repeatable fields use multiple rows for their content that belong to only one single page, you always need to check for the page status (which is not necessary on regular find() operations and therefore nobody is used to that).
      In short: It is far too much work to efficiently and easily get an array of data based on PW pages and fields and I need that a lot for my RockGrid module to build all kinds of tabular data.

      Basic Usage

       
      Docs & Download
      https://modules.processwire.com/modules/rock-finder/
      https://gitlab.com/baumrock/RockFinder/tree/master
       
      Changelog
      180528, v1.0.4 add custom select statement option 180516 change sql query method, bump version to 1.0.0 180515 multilang bugfix 180513 beta release <180513 preview/discussion took place here: https://processwire.com/talk/topic/18983-rocksqlfinder-highly-efficient-and-flexible-sql-finder-module/
    • By blynx
      Hej,
      A module which helps including Photoswipe and brings some modules for rendering gallery markup. Feedback highly appreciated
      (Also pull requests are appreciated 😉 - have a new Job now and don't work a lot with ProcessWire anymore, yet, feel free to contact me here or on GitHub, Im'm still "online"!)

      Modules directory: http://modules.processwire.com/modules/markup-processwire-photoswipe
      .zip download: https://github.com/blynx/MarkupProcesswirePhotoswipe/archive/master.zip
      You can add a photoswipe enabled thumbnail gallery / lightbox to your site like this. Just pass an image field to the renderGallery method:
      <?php $pwpswp = $modules->get('Pwpswp'); echo $pwpswp->renderGallery($page->nicePictures); Options are provided like so:
      <?php $galleryOptions = [ 'imageResizerOptions' => [ 'size' => '500x500' 'quality' => 70, 'upscaling' => false, 'cropping' => false ], 'loresResizerOptions' => [ 'size' => '500x500' 'quality' => 20, 'upscaling' => false, 'cropping' => false ], 'pswpOptions' => (object) [ 'shareEl' => false, 'indexIndicatorSep' => ' von ', 'closeOnScroll' => false ] ]; echo $pswp->renderGallery($page->images, $galleryOptions); More info about all that is in the readme: https://github.com/blynx/MarkupProcesswirePhotoswipe
      What do you think? Any ideas, bugs, critique, requests?
      cheers
      Steffen