{"id":17886621,"url":"https://github.com/holzmaster/openpr0gramm","last_synced_at":"2025-03-22T14:31:41.052Z","repository":{"id":40589199,"uuid":"42402933","full_name":"holzmaster/OpenPr0gramm","owner":"holzmaster","description":"Eine quelloffene .NET-Implementierung für das pr0gramm.","archived":false,"fork":false,"pushed_at":"2022-11-08T21:06:53.000Z","size":148,"stargazers_count":28,"open_issues_count":9,"forks_count":11,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-18T12:03:17.985Z","etag":null,"topics":["api","hacktoberfest","pr0gramm","pr0gramm-com"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/holzmaster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-09-13T16:15:47.000Z","updated_at":"2023-07-20T14:46:01.000Z","dependencies_parsed_at":"2023-01-22T22:00:32.840Z","dependency_job_id":null,"html_url":"https://github.com/holzmaster/OpenPr0gramm","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/holzmaster%2FOpenPr0gramm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/holzmaster%2FOpenPr0gramm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/holzmaster%2FOpenPr0gramm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/holzmaster%2FOpenPr0gramm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/holzmaster","download_url":"https://codeload.github.com/holzmaster/OpenPr0gramm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244972131,"owners_count":20540925,"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":["api","hacktoberfest","pr0gramm","pr0gramm-com"],"created_at":"2024-10-28T13:08:35.810Z","updated_at":"2025-03-22T14:31:40.731Z","avatar_url":"https://github.com/holzmaster.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenPr0gramm [![Travis Build Status](https://travis-ci.com/holzmaster/OpenPr0gramm.svg?branch=master)](https://travis-ci.com/holzmaster/OpenPr0gramm) [![AppVeyor Build status](https://ci.appveyor.com/api/projects/status/uckh08ose23rap7l?svg=true)](https://ci.appveyor.com/project/holzmaster/openpr0gramm) ![NuGet Version](https://img.shields.io/nuget/v/OpenPr0gramm.svg) [![LGPL-3.0 License](https://img.shields.io/github/license/holzmaster/OpenPr0gramm.svg)](https://github.com/holzmaster/OpenPr0gramm/blob/master/LICENSE)\nEine quelloffene .NET-Implementierung für das pr0gramm.\n\n## Installation\n\nVia NuGet:\n```\nInstall-Package OpenPr0gramm\n```\n\n**Achtung:** Nach dem Installieren wird eine `RefitStubs.cs` zu dem Projekt hinzugefügt. Diese wird immer beim Kompilieren neu generiert. **Du darfst sie nicht löschen**, sonst findet der Generator nicht mehr und wirft einen Compilerfehler. Ich weiß, du brauchst sie eigentlich nicht, aber aufgrund einer bescheuerten Designentscheidung von Refit (siehe [die Issue dazu](https://github.com/paulcbetts/refit/issues/120)) geht das nicht anders. Wenn du gerade eine freie Minute hast, schau doch bei der [Issue](https://github.com/paulcbetts/refit/issues/120) vorbei und weise den Maintainer darauf hin, dass man da was machen sollte.\n\n## Verwendung\nDie Library besteht aus 3 Schichten und ist an der JS-API der Webseite orientiert:\n\n1. Refit-Interface-HTTP-Wrapper\n2. Mapping der Rohdaten auf die Interface-Abstraktionen (`IPr0grammApiClient`)\n3. Wrapping von abstrahierten Parametern auf die Rohdaten (`Pr0grammClient`)\n\nFür den normalen Umgang sollte der 3. Layer reichen. Wenn du willst, kannst du aber auch die einzelnen Schichten austauschen. Die Library sollte auf allen Plattformen lauffähig sein, auf denen Refit und JSON.NET funktionieren.\n\nHier etwas Beispielcode:\n```C#\nvar client = new Pr0grammClient();\n\nvar captchaRes = await client.User.RequestCaptcha();\nvar captchaImage = captchaRes.GetCaptchaImageBytes(); \nvar loginRes = await client.User.LogIn(\"user\", \"password\", captchaRes.Token, \"aaaaa\");\nif(!loginRes.Success)\n{\n\tif(loginRes.Ban != null \u0026\u0026 loginRes.Ban.IsBanned)\n\t{\n\t\tConsole.WriteLine($\"Du bist bis {loginRes.Ban.Until} gebannt. Warum? \\\"{loginRes.Ban.Reason}\\\".\");\n\t}\n\telse\n\t{\n\t\tConsole.WriteLine(\"Das Passwort war wohl falsch oder so.\");\n\t}\n\treturn;\n}\n\nvar frontItemRes = await client.Item.GetItems(ItemFlags.SFW, ItemStatus.Promoted);\nConsole.WriteLine(\"Posts:\");\nforeach(var item in frontItemRes.Items)\n{\n\tConsole.WriteLine($\"{item.Id} von {item.User} ({item.Mark})\");\n}\n\nCookieContainer container = client.GetCookie(); // Kann weggespeichert/serialisiert werden\n// für spätere Verwendung (um sich nicht noch mal einloggen zu müssen)\nvar client2 = new Pr0grammClient(container); // Client mit Satz an Cookies initialisieren\n```\nDer Rest sollte selbsterklärend sein. Sämtliche Funktionalität befindet sich bei der `Pr0grammClient`-Klasse.\n\n## Nutzungsbestimmungen/Lizenz\nZusätzlich zu den in der LICENSE-File angegebenen Bestimmungen gilt:\n- **Keine kommerzielle Nutzung.**\n- Hole dir *vorher* die Erlaubnis der Seitenbetreiber, deine Anwendung zu entwickeln.\nWenn du etwas vorhast, was nicht in Einklang mit den Nutzungsbestimmungen ist, kontaktiere mich (via pr0gramm/Email) und wir können drüber reden.\n\n## Bugs\nEs kann sein, dass bei der Serialisierung bestimmte Felder aufgrund von Typos oder Brainlags bei der Implementierung nicht richtig gemappt werden. Wenn dir sowas auffällt, kontaktiere mich bitte, poste eine Issue, oder fix es selbst und stelle einen Pull-Request.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fholzmaster%2Fopenpr0gramm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fholzmaster%2Fopenpr0gramm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fholzmaster%2Fopenpr0gramm/lists"}