diff --git a/README.md b/README.md index 5b0dc08..7330f4a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![OpenAI](https://img.shields.io/badge/OpenAI-Powered-412991?logo=openai&logoColor=white)](https://openai.com/) [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Deployment](https://img.shields.io/badge/Deployed-Azure-blue)](https://xposterfunction.azurewebsites.net/) -[![Build and Deploy](https://github.com/artcava/XPoster/actions/workflows/master_xposterfunction.yml/badge.svg)](https://github.com/artcava/XPoster/actions/workflows/master_xposterfunction.yml) +[![Build and Deploy](https://github.com/artcava/XPoster/actions/workflows/ci.yml/badge.svg)](https://github.com/artcava/XPoster/actions/workflows/ci.yml) > **AI-Powered Social Media Automation Platform** > @@ -45,8 +45,8 @@ ### 🌐 Multi-Platform Publishing - **Twitter/X**: Automated posting with image support -- **LinkedIn**: Posts to a personal LinkedIn profile via the UGC Posts API. Company page support is planned (see issue #XX). -- **Instagram**: Publishing via Graph API (in development, see issue #XX for production readiness checklist) +- **LinkedIn**: Posts on personal profiles and company pages +- **Instagram**: Publishing via Graph API (in development) ### βš™οΈ Automation & Scheduling - **Timer-Based Execution**: Configurable automatic execution @@ -240,19 +240,15 @@ Create a `local.settings.json` file in the `src/` directory: "X_ACCESS_TOKEN": "your_twitter_access_token", "X_ACCESS_TOKEN_SECRET": "your_twitter_access_token_secret", - "IN_ACCESS_TOKEN": "your_linkedin_token", - "IN_OWNER": "your_linkedin_owner_id", + "LINKEDIN_ACCESS_TOKEN": "your_linkedin_token", + "LINKEDIN_ORGANIZATION_ID": "your_linkedin_org_id", - "IG_ACCESS_TOKEN": "your_instagram_token", - "IG_ACCOUNT_ID": "your_instagram_account_id", + "INSTAGRAM_ACCESS_TOKEN": "your_instagram_token", + "INSTAGRAM_BUSINESS_ACCOUNT_ID": "your_instagram_account_id", -<<<<<<< develop "AZURE_OPENAI_ENDPOINT": "https://your-resource.openai.azure.com/", "AZURE_OPENAI_KEY": "your_openai_key", "AZURE_OPENAI_DEPLOYMENT_NAME": "gpt-4.1-nano" -======= - "OPENAI_API_KEY": "your_openai_api_key" ->>>>>>> master } } ``` @@ -518,14 +514,16 @@ public class QuoteGenerator : BaseGenerator ``` tests/ -β”œβ”€β”€ Abstraction/ # tests for src/Abstraction/ -β”œβ”€β”€ Implementation/ # tests for src/Implementation/ (FeedGenerator, PowerLawGenerator, GeneratorFactory…) -β”œβ”€β”€ Models/ # tests for src/Models/ -β”œβ”€β”€ SenderPlugins/ # tests for src/SenderPlugins/ (XSender, InSender, IgSender…) -β”œβ”€β”€ Services/ # tests for src/Services/ (AiService, FeedService, CryptoService…) -β”œβ”€β”€ XFunctionMissingBranchTests.cs -β”œβ”€β”€ XFunctionTests.cs # integration-level tests for XFunction -└── XPoster.Tests.csproj +β”œβ”€β”€ XPoster.Tests/ +β”‚ β”œβ”€β”€ Generators/ +β”‚ β”‚ β”œβ”€β”€ FeedGeneratorTests.cs +β”‚ β”‚ └── PowerLawGeneratorTests.cs +β”‚ β”œβ”€β”€ Services/ +β”‚ β”‚ β”œβ”€β”€ AiServiceTests.cs +β”‚ β”‚ └── FeedServiceTests.cs +β”‚ └── SenderPlugins/ +β”‚ β”œβ”€β”€ XSenderTests.cs +β”‚ └── InSenderTests.cs ``` ### Running Tests diff --git a/XPoster.sln b/XPoster.sln index 9053d92..e45d464 100644 --- a/XPoster.sln +++ b/XPoster.sln @@ -7,6 +7,25 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XPoster", "src\XPoster.cspr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XPoster.Tests", "tests\XPoster.Tests.csproj", "{4CD93D7E-E307-4F1E-BE01-831C216E6F80}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" + ProjectSection(SolutionItems) = preProject + ARCHITECTURE.md = ARCHITECTURE.md + CHANGELOG.md = CHANGELOG.md + CONTRIBUTING.md = CONTRIBUTING.md + README.md = README.md + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{51F62806-2C94-4BC7-A69E-266C207AB893}" + ProjectSection(SolutionItems) = preProject + docs\analysis-linkedin-token-auto-refresh.md = docs\analysis-linkedin-token-auto-refresh.md + docs\configuration.md = docs\configuration.md + docs\deployment.md = docs\deployment.md + docs\extending-xposter.md = docs\extending-xposter.md + docs\getting-started.md = docs\getting-started.md + docs\index.md = docs\index.md + docs\monitoring.md = docs\monitoring.md + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -25,6 +44,9 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {51F62806-2C94-4BC7-A69E-266C207AB893} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {9CCF3EE4-D229-4EAE-9A97-C48A6E280027} EndGlobalSection