View Full Version : Excel 2 Forum
Zweeper
10-31-2019, 01:38 PM
Good day everybody,
I have an excel file with different rows and I want to create threads with content out of each row.
Is there already something like a phyton script available for this?
If not, can you give me some tipps and advice to start off how I could cope with something like this?
Maybe there is even a coder who could code something like this in python for me?
Greetings!
Is there a reason you want to use Python even though vBulletin 5 is created using PHP?
Using PHP you can read the Excel file and iterate through each row and then insert the thread.
// Path to the vBulletin 5 folder.
// '.' indicates current directory where the .htaccess file resides.
$vbpath = '.';
define('CSRF_PROTECTION', false);
require_once($vbpath . '/includes/vb5/autoloader.php');
vB5_Autoloader::register($vbpath);
vB5_Frontend_Application::init('config.php');
$api = Api_InterfaceAbstract::instance();
$thread = $api->callApi('content_text', 'add', [
'data' => [
'rawtext' => 'Content of the thread.',
'title' => 'Title of the thread.',
'parentid' => 3, // ID of the forum section (or node as they call it in vBulletin 5)
'userid' => 1 // ID of the user to post the thread as
],
'options' => [
'nl2br' => true
]
]);
var_dump($thread);
/*
Integer if created successfully, contains the thread id.
int(15)
Array if errors.
array(1) { [0]=> array(1) { [0]=> string(19) "humanverify_missing" } }
*/
Zweeper
10-31-2019, 01:53 PM
no, just because I am more into python at the moment.
Thanks already for the script. But how can I tell it to get the data from my excel exactly? Is there an example? :(
--------------- Added 1572536085 at 1572536085 ---------------
The excel file is structured as
colum 1 = title
colum = thread content
there are x rows whereby each row should be a different thread.
I understand the code you wrote there, but I dont get how I can link this to an excel file.
Can you help me here?
--------------- Added 1572543745 at 1572543745 ---------------
It hasnt necessarly to be excel 2 vbulletin. Right now I just have all the data in an excel file.
Zweeper
11-02-2019, 11:00 AM
I came a bit closer to the solution I guess, got some help from another guy regarding the importing problem from a csv file. But I can't get it working.
Anyone, any help here? :(
$row = 1;
if (($handle = fopen("yourdata.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($rowfields);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
...
$post_title = $rowfields[0];
$post_content = $rowfields[1];
...
// then you call the thread creator
PostCreator(...
}
fclose($handle);
}
function PostCreator($title, $content... ) {
...
// here you call the code to create the thread
// it's not real code, just to help you figure it out
$thread = $api->callApi('content_text', 'add', [
'data' => [
'rawtext' => $content,
'title' => $title,
'parentid' => 3, // ID of the forum section (or node as they call it in vBulletin 5)
'userid' => 1 // ID of the user to post the thread as
],
'options' => [
'nl2br' => true
]
]);
}
Something like:
// Path to the vBulletin 5 folder.
// '.' indicates current directory where the .htaccess file resides.
$vbpath = '.';
define('CSRF_PROTECTION', false);
require_once($vbpath . '/includes/vb5/autoloader.php');
vB5_Autoloader::register($vbpath);
vB5_Frontend_Application::init('config.php');
$api = Api_InterfaceAbstract::instance();
$row = 1;
if (($handle = fopen('yourdata.csv', 'r')) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
$num = count($rowfields);
echo '<p> ' . $num . ' fields in line ' . $row . ': <br /></p>';
$row++;
$post_title = $rowfields[0];
$post_content = $rowfields[1];
// then you call the thread creator
$thread = $api->callApi('content_text', 'add', [
'data' => [
'rawtext' => $post_content,
'title' => $post_title,
'parentid' => 3, // ID of the forum section (or node as they call it in vBulletin 5)
'userid' => 1 // ID of the user to post the thread as
],
'options' => [
'nl2br' => true
]
]);
}
fclose($handle);
}
You still need to modify the parentid and userid value.
Pretty sure the script you gave is not valid though because it calls the $rowfields variable which does not exist.
Zweeper
11-02-2019, 12:08 PM
thanks, I finally got it working. Many thanks 2 you! :)
Zweeper
04-06-2020, 05:28 AM
Hey Dave, the script works like a charm, thank you so much again for your help!
There just came up another question from my side. When I work with larg csv files (more than about 1000 lines) the script runs longer than the max. execution time allowed by my server. The most of the times I split the files into separate files, what works of course.
But is there a "simple" way to update the script so that it also works with large files without running into problems with the max. execution time?
Regards!
Try
// then you call the thread creator
set_time_limit(30);
$thread = $api->callApi('content_text', 'add', [
Zweeper
04-10-2020, 07:08 AM
Seems to work, many thanks! :)
Zweeper
04-13-2020, 09:15 AM
Ok it is working, but not for me, since I cant change the set_time_limit at more than 90 seconds.
I could split my csv file into several files and then create several scripts which I have to run each after another.
like:
import_n.php imports import_n.csv
n+1
Is there a way to automatically start import_2.php when import_1 is finished?
I wrote 30, not 90 or more. (The call in each loop resets the time limit. ;) )
But note: If the restriction is set by your shared host provider resetting or any other solution (split or various cronjobs) could be not in accordance to the using rules. Cause same effect - "high" cpu utilization.
But you can also split your file automated and localy and call your imports (from different sources or with little sleeps)
Zweeper
04-13-2020, 01:43 PM
Yes i know, thanks :)
But it seems to be blocked from server side and they stop each script after a maximum of 90 seconds of runtime and I will receive the following message:
"Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at [no address given] to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log."
And if I remember the first post - you can call all directly from excel via post or frontend controller. :D
Zweeper
04-13-2020, 02:22 PM
How does that work?
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, vBulletin Solutions Inc.