-
Notifications
You must be signed in to change notification settings - Fork 0
/
status-lib.php
180 lines (153 loc) · 5.92 KB
/
status-lib.php
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<?php
/*
* Project: ChatGPT API
* Author: Vontainment
* URL: https://vontainment.com
* File: status-helper.php
* Description: ChatGPT API Status Generator
*/
function generateStatus($accountName, $accountOwner)
{
$system_message = SYSTEM_MSG;
// Retrieve account information from the database
$accountInfo = getAcctInfo($accountOwner, $accountName);
// Get prompt, link, hashtags, image prompts, and platform from account info
$prompt = $accountInfo->prompt;
$link = $accountInfo->link;
$hashtags = $accountInfo->hashtags;
$image_prompt = $accountInfo->image_prompt;
$platform = $accountInfo->platform; // Retrieve platform type
// Retrieve the status content from API
$status_content = getStatus($link, $prompt, $platform, $system_message);
// Generate image associated with the status using image prompts
$image_name = getImage($accountName, $accountOwner, $image_prompt);
// Conditionally append hashtags if requested
if ($hashtags) {
$hashtag_content = getHashtags($status_content, $platform); // Pass platform to adjust number of hashtags
$status_content .= ' ' . $hashtag_content;
}
// Save status with the generated image name
saveStatus($accountName, $accountOwner, $status_content, $image_name);
}
function getStatus($link, $prompt, $platform, $system_message)
{
// Determine the token count for status updates based on the platform
if ($platform === 'facebook') {
$statusTokens = 256;
} elseif ($platform === 'twitter') {
$statusTokens = 64;
} elseif ($platform === 'instagram') {
$statusTokens = 128;
}
$headers = [
'Content-Type: application/json',
'Authorization: Bearer ' . API_KEY,
];
$status_data = [
'model' => MODEL,
'messages' => [
['role' => 'system', 'content' => $system_message],
['role' => 'user', 'content' => 'Generate a social status under 256 characters with NO hashtags: ' . $prompt . ' Also add the following CTA: Visit: ' . $link]
],
'temperature' => TEMPERATURE,
'max_tokens' => $statusTokens,
];
$ch = curl_init(API_ENDPOINT);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($status_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$status_response = curl_exec($ch);
curl_close($ch);
if ($status_response === false) {
return 'API request failed'; // Consider how to handle failures more robustly
}
$status_response_data = json_decode($status_response, true);
return $status_response_data['choices'][0]['message']['content'] ?? '';
}
function getHashtags($status_content, $platform)
{
$headers = [
'Content-Type: application/json',
'Authorization: Bearer ' . API_KEY,
];
// Determine the number of hashtags and tokens based on the platform
if ($platform === 'facebook') {
$totaltags = '3 to 5';
$hashtagTokens = 60;
} elseif (
$platform === 'twitter'
) {
$totaltags = '3';
$hashtagTokens = 30;
} elseif ($platform === 'instagram') {
$totaltags = '20 to 30';
$hashtagTokens = 128;
}
$hashtag_data = [
'model' => MODEL,
'messages' => [
['role' => 'user', 'content' => 'Generate and only reply with ' . $totaltags . ' relevant hashtags based on this status: ' . $status_content]
],
'temperature' => TEMPERATURE,
'max_tokens' => $hashtagTokens,
];
$ch = curl_init(API_ENDPOINT);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($hashtag_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$hashtag_response = curl_exec($ch);
curl_close($ch);
if ($hashtag_response === false) {
return ''; // Return an empty string if the API request fails
}
$hashtag_response_data = json_decode($hashtag_response, true);
return $hashtag_response_data['choices'][0]['message']['content'] ?? '';
}
function getImage($accountName, $accountOwner, $image_prompt)
{
$headers = [
'Content-Type: application/json',
'Authorization: Bearer ' . API_KEY,
];
$image_data = [
'model' => 'dall-e-3',
'prompt' => $image_prompt,
'n' => 1,
'quality' => "standard",
'size' => "1792x1024"
];
$ch = curl_init('https://api.openai.com/v1/images/generations');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($image_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$image_response = curl_exec($ch);
curl_close($ch);
$image_response_data = json_decode($image_response, true);
// Adjust the way the image URL is retrieved
$image_url = $image_response_data['data'][0]['url'] ?? '';
if (!empty($image_url)) {
// Generate a random name for the image
$random_name = uniqid() . '.png';
// Path to save the image
$image_path = __DIR__ . '/../public/images/' . $accountOwner . '/' . $accountName . '/' . $random_name;
// Save the image
file_put_contents($image_path, file_get_contents($image_url));
// Return the image name
return $random_name;
}
return ''; // Return an empty string if no URL is fetched
}
function saveStatus($accountName, $accountOwner, $status_content, $image_name)
{
$db = new Database();
$sql = "INSERT INTO status_updates (username, account, status, created_at, status_image) VALUES (:username, :account, :status, NOW(), :status_image)";
$db->query($sql);
$db->bind(':username', $accountOwner);
$db->bind(':account', $accountName);
$db->bind(':status', $status_content);
$db->bind(':status_image', $image_name);
$db->execute();
}