vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB5 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=263)
-   -   Excel 2 Forum (https://vborg.vbsupport.ru/showthread.php?t=327626)

Zweeper 10-31-2019 01:38 PM

Excel 2 Forum
 
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!

Dave 10-31-2019 01:52 PM

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.
PHP Code:

// 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' => // 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 [DATE]1572536085[/DATE] at [TIME]1572536085[/TIME] ---------------

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 [DATE]1572543745[/DATE] at [TIME]1572543745[/TIME] ---------------

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? :(






Code:

$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
]
]);

}


Dave 11-02-2019 11:40 AM

Something like:

PHP Code:

// 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($handle1000',')) !== 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' => // 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!

shka 04-06-2020 08:15 AM

Try

PHP Code:

        // 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?

shka 04-13-2020 01:32 PM

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."

shka 04-13-2020 01:53 PM

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?


All times are GMT. The time now is 02:11 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.03435 seconds
  • Memory Usage 1,771KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_code_printable
  • (3)bbcode_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (14)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete