Une bouteille à la mer

Bonjour à tous 1er message sur le forum,

Je suis ravi de rejoindre enfin cette communauté après une période de simple lecteur. Aujourd'hui, je me lance et souhaite partager avec vous mon expérience personnelle, un peu atypique, dans le monde du développement et de l'automatisation.

Récemment, j'ai plongé dans l'univers l'automatisation grace au logiciel russe, ZennoPoster. Bien que je ne sois pas un développeur/codeur de formation, ce logiciel de type no-code m'a ouvert au notion de développement et du code notamment du C#, langage que je commence à peine à appréhender.
Car meme si il s'agit d'un logiciel qui peut enregistre nos actions sur un site web et les convertir en bloc de code,
dès qu'on veux aller plus loin ou passer certains problèmes le C# devient utile!

En tant que débutant dans le domaine de l'affiliation et du web-marketing, j'ai rapidement compris l'importance de l'automatisation et des compétences en développement.
Qui je pense avait une grande barriere à l'entrée avant l'arrivé de GPT pour les "non techos" comme moi, par hasard j'ai découvert le python et dev mon premier script mais avec le recul tout ma méthodologie n'était pas bonne et c'est là le paradoxe de GPT on réaliser des choses en tant que débutant mais avoir un minimum de connaissance de base permet de structurer sa pensée, ses demandes...

Puis encore par hasard,) j'ai découvert Zenno qui dans mon cas est bien facile en main à prendre que Visual Studio Code car on peut "visualiser" son code, le cheminement logique...
Ce que je pense qui est atypique dans mon parcours c'est que sans connaissance j'ai pu développer des solutions des outils dont j'avais besoin alors qu'auparavant il fallait d'abord apprendre le code et le développement pour entrevoir des solutions possibles.


Souvent, je remarque un paradoxe intéressant : de nombreuses personnes excellent en SEO, en affiliation, et savent générer des revenus en ligne sans posséder de solides connaissances techniques. À l'inverse, ceux qui maîtrisent le code et les aspects techniques ne savent pas toujours comment monétiser efficacement ces compétences alors qu'ils ont des competences qui permettent d'etre bien plus efficace qu'un éditeur de site web dont les connaissance se limitent à Wordpress.

Mon objectif avec ce message est de lancer un appel à la communauté : utilisez-vous des outils d'automatisation comme ZennoPoster ou autres pour développer vos projets web afin de les monétiser?
( Zenno utilisant .net je poste dans ce forum j'espere que c'est le bon endroit)

Pour ma part, j'ai commencé à rédiger automatiquement des articles avec GPT, les enrichissant ensuite via des techniques de spinning et de scraping. Je poste ces contenus sur des sites WordPress ou en Parasite SEO, optimisant ainsi ma présence en ligne et mes efforts de monétisation.

C'est un domaine qui m'enthousiasme énormément et dans lequel j'espère progresser pour optimiser et monétiser mes sites. Je suis curieux de connaître vos approches, vos outils préférés, et comment vous les utilisez pour faire fructifier vos projets.

Je pars de zéro, mais avec une motivation sans limite. J'espère que nous pourrons échanger nos connaissances et expériences sur ce post o en DM pour grandir ensemble dans cet univers fascinant.


Merci de m'avoir lu je n'ai pas forcement encore les bon termes/vocabulaire! Mais j'attends vos retours avec impatience. 😊

Ci dessous voici un exemple de mon projet actuel
Nom : 2024-03-09 08_47_27-ProjectMaker for ZennoPoster v7.7.11.0.jpg
Affichages : 214
Taille : 361,6 Ko

Voila un exemple encore tres brouillon de code qui me permettent d'éviter la création de nombreux bloc spécifique à Zenno en passant directement pr du C#

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
 
 
// Méthode 'Check' : Code Partagé utlisé par les 3 Actions de Check + Utilisé partiellement par d'autres Bloc 
namespace ZennoLab.SharedCode
{
    // ======= Partie 1 - Définition de la classe FilePathHelper pour la gestion des chemins de fichiers =======
 
   public static class FilePathHelper
    {
        // 1.2 Construction des chemins de fichiers personnalisés en fonction du type de fichier et de l'extension.
        public static string[] BuildFilePaths(IZennoPosterProjectModel project, string fileType, string fileExtension)
        {
            string baseDirectory = project.Directory + @"\02 - The Project\";
            string baseFilePath = baseDirectory + project.Variables["P_Language_3_Name_Plus_ID"].Value + @"\" + project.Variables["P_Theme_3_Name_Plus_ID"].Value;
            string suffix = " - ";
            string customFolder = @"\01 - In\" + fileType + suffix;
            string shareSubFolder = @"\000 - Share\" + customFolder;
            string commonPath = baseFilePath + @"\" + project.Variables["P_Sub_3_Theme_Plus_ID"].Value;
 
            // 1.2.2 Chemins pour les différents types de fichiers.
            string customFilePath = commonPath + @"\" + project.Variables["M_Compte_3_Name_Plus_ID"].Value + customFolder + project.Variables["M_Compte_2_Name"].Value + suffix + "Custom." + fileExtension;
            string shareSubFilePath = commonPath + shareSubFolder + project.Variables["P_Sub_2_Theme_Name"].Value + suffix + "Share Sub." + fileExtension;
            string shareThemeFilePath = baseFilePath + shareSubFolder + project.Variables["P_Theme_2_Name"].Value + suffix + "Share Theme." + fileExtension;
 
			    // Supprime les doubles barres obliques inversées (\\) dans les chemins de fichiers revenir sur ce code plus tard
    customFilePath = RemoveDoubleBackslashes(customFilePath);
    shareSubFilePath = RemoveDoubleBackslashes(shareSubFilePath);
    shareThemeFilePath = RemoveDoubleBackslashes(shareThemeFilePath);
 
            return new[] { customFilePath, shareSubFilePath, shareThemeFilePath };
        }
 
 
        // 1.3 Vérification de l'existence du fichier et retour du chemin si trouvé.
        public static string FindExistingFilePath(IZennoPosterProjectModel project, string[] filePaths)
        {
            foreach (string filePath in filePaths)
            {
                if (File.Exists(filePath))
                {
                    LogHelper.LogFileFound(project, filePath);
                    return filePath;
                }
            }
 
 
            LogHelper.LogFileNotFoundAndThrow(project);
            return null;
        }
 
        // 1.4 Lecture et retour du contenu d'un fichier.
        public static string ReadFileContent(IZennoPosterProjectModel project, string filePathVariableName)
        {
            string filePath = project.Variables[filePathVariableName].Value;
	        try
	        {                   return File.ReadAllText(filePath);          }
	        catch (FileNotFoundException)
	        {                   LogHelper.LogFileNotFoundAndThrow(project);             return null;                }
	    }
		// 1.5 Supprime les doubles barres obliques inversées (\\) dans le chemin du fichier.
			public static string RemoveDoubleBackslashes(string filePath)
			{
                            return filePath.Replace("\\\\", "\\");
}
 
	}
 
 
	// ======= Partie 2 - Classe Action pour effectuer différentes actions liées aux fichiers =======
 
 
	public static class Action
{
    // Méthode générique pour lier une ressource ZennoPoster (table ou liste) à un fichier
    // ou lire le contenu du fichier en fonction du type T.
    public static void Check<T>(IZennoPosterProjectModel project, string fileType, string fileExtension, string variableName, string resourceName, string variablePathName, string variableContentName)
    {
        string foundFilePath = FilePathHelper.FindExistingFilePath(project, FilePathHelper.BuildFilePaths(project, fileType, fileExtension));
        project.Variables[variableName].Value = foundFilePath;
 
        if (typeof(T) == typeof(IZennoList))
        {
            IZennoList resource = project.Lists[resourceName] as IZennoList;
            resource?.Bind(foundFilePath);
        }
        else if (typeof(T) == typeof(IZennoTable))
        {
            IZennoTable resource = project.Tables[resourceName] as IZennoTable;
            resource?.Bind(foundFilePath);
        }
        else
        {
            // Utilisez la méthode ReadFileContent de la classe FilePathHelper pour la lecture du contenu.
            project.Variables[variableContentName].Value = FilePathHelper.ReadFileContent(project, variablePathName);
        }
 
        LogHelper.LogFileBound(project, resourceName, foundFilePath);
    }
}
 
// Fin de la Partie 2
 
 
 
 
    // ======= Partie 3 - Classe LogHelper pour la journalisation des événements liés aux fichiers =======
 
    public static class LogHelper
    {
        public static void LogFileFound(IZennoPosterProjectModel project, string filePath)
        {
            // 3.1 Journalisation que le fichier est trouvé sur une ligne de log.
            project.SendInfoToLog("File found at:");
            project.SendInfoToLog(filePath);
        }
 
        public static void LogFileNotFoundAndThrow(IZennoPosterProjectModel project)
        {
            // 3.2 Journalisation en jaune et exception si aucun fichier n'est trouvé.
            string errorMessage = "No files were found at the 3 specified locations.";
            project.SendToLog(errorMessage, ZennoLab.InterfacesLibrary.Enums.Log.LogType.Info, false, ZennoLab.InterfacesLibrary.Enums.Log.LogColor.Red);
            throw new FileNotFoundException(errorMessage);
        }
 
        public static void LogFileBound(IZennoPosterProjectModel project, string resourceName, string filePath)
        {
            // 3.3 Journalisation si le fichier est lié avec succès à une table.
            project.SendInfoToLog("File successfully bound to resource: " + resourceName);
        }
    }
 
    // Fin de la Partie 3
}