{"id":15755737,"url":"https://github.com/svenpet90/instagram","last_synced_at":"2025-04-15T10:29:55.946Z","repository":{"id":65143499,"uuid":"471356159","full_name":"svenpet90/instagram","owner":"svenpet90","description":"TYPO3 Extension to import and display instagram posts/feeds","archived":false,"fork":false,"pushed_at":"2024-12-03T13:40:00.000Z","size":208,"stargazers_count":6,"open_issues_count":9,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-28T19:12:41.784Z","etag":null,"topics":["instagram","php","socialmedia","typo3","typo3-cms-extension","typo3-extension"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/svenpet90.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":["https://www.paypal.me/svenharders"]}},"created_at":"2022-03-18T12:18:42.000Z","updated_at":"2025-03-27T11:19:19.000Z","dependencies_parsed_at":"2024-09-17T11:36:29.356Z","dependency_job_id":null,"html_url":"https://github.com/svenpet90/instagram","commit_stats":{"total_commits":54,"total_committers":4,"mean_commits":13.5,"dds":"0.14814814814814814","last_synced_commit":"005cb71b2412cd5457ac1b2fe4cff23af02c90c2"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svenpet90%2Finstagram","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svenpet90%2Finstagram/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svenpet90%2Finstagram/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svenpet90%2Finstagram/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/svenpet90","download_url":"https://codeload.github.com/svenpet90/instagram/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248782568,"owners_count":21160770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["instagram","php","socialmedia","typo3","typo3-cms-extension","typo3-extension"],"created_at":"2024-10-04T08:40:27.828Z","updated_at":"2025-04-15T10:29:55.923Z","avatar_url":"https://github.com/svenpet90.png","language":"PHP","funding_links":["https://www.paypal.me/svenharders"],"categories":[],"sub_categories":[],"readme":"[![StandWithUkraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://github.com/vshymanskyy/StandWithUkraine/blob/main/docs/README.md)\n[![TYPO3 10](https://img.shields.io/badge/TYPO3-10-orange.svg)](https://get.typo3.org/version/10)\n[![TYPO3 11](https://img.shields.io/badge/TYPO3-11-orange.svg)](https://get.typo3.org/version/11)\n[![Latest Stable Version](https://poser.pugx.org/svenpetersen/instagram/v)](https://packagist.org/packages/svenpetersen/instagram)\n[![Total Downloads](https://poser.pugx.org/svenpetersen/instagram/downloads)](https://packagist.org/packages/svenpetersen/instagram)\n[![Latest Unstable Version](https://poser.pugx.org/svenpetersen/instagram/v/unstable)](https://packagist.org/packages/svenpetersen/instagram)\n[![License](https://poser.pugx.org/svenpetersen/instagram/license)](https://packagist.org/packages/svenpetersen/instagram)\n[![PHP Version Require](https://poser.pugx.org/svenpetersen/instagram/require/php)](https://packagist.org/packages/svenpetersen/instagram)\n\nTYPO3 Extension \"instagram\"\n=================================\n\n## What does it do?\n\nTYPO3 Extension to import and display instagram posts/feeds in a TYPO3 Website.\n\nCreates and auto-refreshes long-lived api access tokens, imports\ninstagram feeds/posts as entities to the database and output feeds/posts via\nFrontend-Plugin.\n\n* \\\u003e\\= V3.x of this extension uses the \"Instagram API with Instagram Login\" App and API.\n* \\\u003c\\= V2.x uses the \"Instagram Basic Display API\" which will reach its EOL on Dec 4th 2024.\n\n**Summary of features**\n\n* Backend module for easy creation of long-lived API access tokens\n* Automatic refreshing of API access tokens to keep them valid\n* Import multiple Instagram users feeds/posts\n* Uses official \"Instagram API with Instagram Login\" to access a users feed.\n* Provides commands to refresh access tokens and to import feeds via\n  cronjob/scheduler\n* Downloads the posts (images/videos). No API calls needed when displaying\n  them = no frontend performance impact.\n* Display users feeds/posts in any way you like\n* Based on Extbase and Fluid\n\n## Installation\n\nThe recommended way to install the extension is by\nusing [Composer](https://getcomposer.org/). In your Composer based TYPO3 project\nroot, just do:\n\u003cpre\u003ecomposer require svenpetersen/instagram\u003c/pre\u003e\n\n## Setup\n\n1. Include the provided static TypoScript\n2. Create a Facebook \"Instagram API with Instagram Login\" App: See the\n   [official Documentation](https://developers.facebook.com/docs/instagram-platform/instagram-api-with-instagram-login)\n   for a step by step guide\n3. Use the Backend Module provided by this Extension to create a \"long-lived\n   access token\" in a \"Feed\" Entity.\n4. Execute the command \u003ccode\u003einstagram:import:posts {username}\n   {storagePid} [limit|25]\u003c/code\u003e to import the posts from a given users feed\n5. Add a Frontend-Plugin on a page to output the imported posts in the frontend.\n\n__Recommended__:\n\n* Add a cronjob/scheduler task to refresh the API Access tokens automatically -\n  see \"Automatic Access Token refresh\" for details.\n* Add a cronjob/scheduler task to import the posts on a regular basis\n\n## Compatibility\n\n| Version | TYPO3       | PHP           | Support/Development                  | API                                |\n|---------|-------------|---------------|--------------------------------------|------------------------------------|\n| 4.x     | 13.4        | \u003e= 8.2 \u003c= 8.4 | Features, Bugfixes, Security Updates | Instagram API with Instagram Login |\n| 3.x     | 12.4        | \u003e= 8.1 \u003c= 8.2 | Bugfixes, Security Updates           | Instagram API with Instagram Login |\n| 2.x     | 12.4        | \u003e= 8.1 \u003c= 8.2 | Bugfixes, Security Updates           | Instagram Basic Display API        |\n| 1.x     | 10.4 - 11.5 | 7.4 - 8.0️    | Abandoned                            | Instagram Basic Display API        |\n\n\n## Funtionalities\n\n### Automatic import of posts\n\nThis extension comes with a command to import (new) posts of a given instagram\nuser.\nIt is recommended to set this command up to run regularly - e.g. once a day.\n\n\u003cpre\u003einstagram:import:posts {username} {storagePid} [limit|25] [--since=\"01/01/2022 00:00:00\" --until=\"12/31/2022 23:59:59\"\n]\u003c/pre\u003e\n\n__Arguments:__\n\n| Name       | Description                                                   |\n|------------|---------------------------------------------------------------|\n| username   | The instagram username to import posts for                    |\n| storagePid | The PID to save the imported posts                            |\n| limit      | The maximum number of posts to import (Optional. Default: 25) |\n\n__Options:__\n\n| Name    | Description                                                    |\n|---------|----------------------------------------------------------------|\n| --since | Date string to fetch posts since (Format: \"MM/DD/YYYY H:i:s\"). |\n| --until | Date string to fetch posts until (Format: \"MM/DD/YYYY H:i:s\"). |\n\n### Automatic Access Token Refreshing\n\nThe generated long-lived access token is valid for 60 days.\nIt can be refreshed when at least 24 hours old.\n\nTo handle automatic refreshing of your access tokens this extension provides the\ncommand\n\u003cpre\u003einstagram:accesstoken:refresh-all\u003c/pre\u003e\n\nMake sure to run this command regularly - e.g. once a day via a\ncronjob/scheduler - in order to keep your access token valid.\n\n### Disable/enable Backend module \"Token Generator\"\n\nTo disable the Backend module - e.g. after you generated all needed tokens - add\nthis\nline to the \u003ccode\u003eLocalConfiguration.php/AdditionalConfiguration.php\u003c/code\u003e:\n\u003cpre\u003e$GLOBALS['TYPO3_CONF_VARS']['SYS']['features']['instagram.tokenGeneratorBeModule'] = false;\u003c/pre\u003e\n\n## Extending\n\n### Additional Template Selector\n\nIf you need a kind of template selector inside a plugin, you can add your own\nselections by adding those to:\n\u003cpre\u003e$GLOBALS['TYPO3_CONF_VARS']['EXT']['instagram']['templateLayouts']['myext'] = ['My Title', 'my value'];\u003c/pre\u003e\n\n### Local path to save downloaded files\n\nBy default all images/videos in imported posts are saved in \u003ccode\u003e\n/public/fileadmin/instagram\u003c/code\u003e\nYou can change this path via the Extensions settings \u003ccode\u003e\nlocal_file_storage_path\u003c/code\u003e option.\n\n### Events\n\nThis extension comes with a few events for you to listen to and add your own\nlogic:\n\n| Name                 | Args.                                             | Description                                                               |\n|----------------------|---------------------------------------------------|---------------------------------------------------------------------------|\n| PrePersistPostEvent  | Post $post \u003cbr\u003e string $action['new' or ‘update'] | Dispatched before a Post is saved. Can be used to modify the Post entity. | Dispatched before the view is rendered. Can be used to modify the view object. E.g. adding additional vars to the frontend (e.g. pagination) |\n| PostPersistPostEvent | Post $post                                        | Dispatched after a Post is saved.                                         | Dispatched before the view is rendered. Can be used to modify the view object. E.g. adding additional vars to the frontend (e.g. pagination) |\n\n## UPGRADE\n\n### v2.x to v3.x\n\nSince the \"Instagram Basic Display API\" will reach it's EOL an Dec. 4th 2024 the underlaying mechanism for generating access tokens changes.\nIt is now required to have a \"Instagram Professional Account\". Any regular Instagram account can be converted into a professional account via the Profile Settings.\n\nYou then have to use the \"Instagram Token Generator\" Backend Module and re-run the token generation process.\nThis extension will then update your exsiting Feed Entity with a new access token.\n\nThere are no changes to the database model, templates or plugins.\nAll your existing customizations etc. will work like before.\n\n## Contributing\n\nPlease refer to the [contributing](CONTRIBUTING.md) document included in this\nrepository.\n\n## Testing\n\nThis Extension comes with a testsuite for coding styles and unit/functional\ntests.\nTo run the tests simply use the provided composer script:\n\n\u003cpre\u003ecomposer ci:test\u003c/pre\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsvenpet90%2Finstagram","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsvenpet90%2Finstagram","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsvenpet90%2Finstagram/lists"}