PDA

Visualizza la versione completa : [c++] programma che si collega ad un sito


g.b99pm10
21-05-2013, 23:12
Ho creato un forum ed ho capito che gestirlo non è facile senza un aiutino dal pc. Quindi ho pensato di creare un bot (in c++) che si colleghi al mio forum e che ogni volta che c'è un nuovo messaggio o un nuovo post faccia un suono. Ora... vorrei sapere 2 cose

1 = mi devo collegare al forum e non per forza al database per rendere effettivo il bot, giusto?

2 = esiste una funzione in c++ che permetta di connettere il programma ad un forum (il mio)

3 = quale valore cambia nel forum quando si apre una nuova discussione?
Infatti io avevo pensato di utilizzare un if
if (c'è una nuova discussione)
{
fai un suono;
}

ma non so come far capire al programma che c'è una nuova discussione. Come posso fare?

grazie a tutti ciao

MItaly
22-05-2013, 01:39
Originariamente inviato da g.b99pm10
1 = mi devo collegare al forum e non per forza al database per rendere effettivo il bot, giusto?
Se il forum non fornisce API apposite è molto più semplice collegarsi direttamente al DB (ammesso che il tuo hoster consenta di collegarsi al DB da "fuori" dalla loro rete interne).


2 = esiste una funzione in c++ che permetta di connettere il programma ad un forum (il mio)
Di già pronto nelle librerie standard non ci sono neanche i socket, figurati se ci sono funzioni per collegarsi a forum :D Se il tuo forum fornisce API di qualche genere probabilmente saranno roba tipo webservice, per cui devi recuperare una qualche libreria per fare richieste HTTP e costruirti le tue API su queste. Ma di rado i forum forniscono API, al più forse puoi appoggiarti ai feed RSS delle varie "stanze" del forum (se il forum li fornisce); in caso contrario, bisogna lavorare di web scraping, ma è una menata (anche se è comunque fattibile).

In ogni caso, il C++ non è il linguaggio più indicato per questo genere di mestieri (per cose simili ho lavorato in Python).


3 = quale valore cambia nel forum quando si apre una nuova discussione?
Infatti io avevo pensato di utilizzare un if
if (c'è una nuova discussione)
{
fai un suono;
}

ma non so come far capire al programma che c'è una nuova discussione. Come posso fare?
Io memorizzerei in un qualche file di dati usato dal programma l'ultima volta che ha controllato il forum; quindi in qualche maniera vai a leggere la lista delle discussioni (in ordine decrescente di data) e vedi se ci sono discussioni più recenti della data in questione.

In ogni caso, in genere i forum forniscono già funzionalità di questo genere; questo forum qui dà la possibilità di "iscriversi" ad un forum (=ti arriva una mail ad ogni nuova discussione), inoltre se il tuo forum fornisce feed RSS puoi usare un qualunque aggregatore di feed RSS per ottenere il risultato che chiedi.

g.b99pm10
22-05-2013, 14:13
allora... visto che questo è il mio primo forum, ho deciso di utilizzare un dominio forumfree. Detto questo credo proprio che non possa accedere al database del forum... e inoltre non credo che metta a disposizione API (Cosa sono?).
Tuttavia il sito ha a disposizione un feed RSS, ma io non so esattamente cosa sia, a cosa serva o come funzioni perchè appunto ho appena iniziato a creare il primo forum...
Per quanto riguarda la programmazione c++ io non mi occupo principalmente di queste funzioni(funzioni che permettano al programma di connettersi a internet) in quanto il mio campo d'interesse è la programmazione di piccoli giochini 2d, quindi, per programmare un programma che si possa connettere ad un sito ho bisogno di scaricare una nuova libreria?

RIASSUMENDO

1 Forumfree non ha api e non posso accedere al database

2 Che cosa è e come funziona il feed RSS? So soltanto che c'è

3 Come potrei sfruttare l' RSS per far capire al programma che c'è una nuova discussione?

4
Io memorizzerei in un qualche file di dati usato dal programma l'ultima volta che ha controllato il forum; quindi in qualche maniera vai a leggere la lista delle discussioni (in ordine decrescente di data) e vedi se ci sono discussioni più recenti della data in questione.

come faccio a far leggere al programma tutte le discussioni?

5 Devo scaricare qualche libreria per programmare questo programma?


6 Sapresti dove posso trovare una guida che spieghi come utilizzare le funzioni che permettono al programma di interagire col forum? (Preferirei che le guide fossero in italiano, ma se proprio non le trovassi anche se sono in inglese mi vanno bene).


Ciao e grazie per l'interessamento

:ciauz:

g.b99pm10
22-05-2013, 16:21
cercando su internet ho trovato che per navigare su internet con un programma c++ si può utilizzare la libreria urlmon.h e urlmon.dll
Come faccio a scaricarle e installarle in code blocks?

MItaly
22-05-2013, 20:22
Originariamente inviato da g.b99pm10
2 Che cosa è e come funziona il feed RSS? So soltanto che c'è
È un documento XML contenente (nel caso che interessa a te) l'elenco delle discussioni recenti in formato facilmente recuperabile da un programma. Prendendo un forum a caso su forumfree, il feed RSS "generale" del forum è una cosa del tipo:


<?xml version="1.0" encoding="windows-1252"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Vicolodellenews Official Forum</title>
<link>http://vicolodellenews.forumfree.it</link>
<description>Vicolodellenews Official Forum</description>
<language>it-IT</language>
<ttl>120</ttl><image><title>Vicolodellenews Official Forum</title>
<url>http://www.youimages.org/public/images/150311logodef0k.png</url>
<link>http://vicolodellenews.forumfree.it</link>
</image><item><title>WELCOME - Mi Presento!</title>
<dc:creator><![CDATA[Cugina_muaO]]></dc:creator>
<description>22/5/2013, 14:12&lt;br /&gt;di: &lt;a href=&quot;http://vicolodellenews.forumfree.it/?act=Profile&amp;MID=8878415&quot; target=&quot;_top&quot;&gt;Cugina_muaO&lt;/a&gt;&lt;br /&gt;in: &lt;a href=&quot;http://vicolodellenews.forumfree.it/?t=65994241&amp;view=getlastpost#lastpost&quot; target=&quot;_top&quot;&gt;Mi Presento!&lt;/a&gt;</description>
<link>http://vicolodellenews.forumfree.it/?t=65994241&amp;view=getlastpost#lastpost</link>
<guid>http://vicolodellenews.forumfree.it/?t=65994241&amp;view=getlastpost#lastpost</guid>
<pubDate>Wed, 22 May 2013 07:12:37 -0500</pubDate>
</item>
... eccetera ...
</channel></rss>

Come vedi i dati che ti servono ci sono tutti e si possono gestire in maniera semplice con un parser XML.


3 Come potrei sfruttare l' RSS per far capire al programma che c'è una nuova discussione?
Come detto sopra: il programma si segna in un file l'ultima data a cui ha controllato ed esamina il feed per vedere se ci sono discussioni nuove.


4 come faccio a far leggere al programma tutte le discussioni?
Scaricando il file XML in questione ed elaborandolo con un parser XML.


5 Devo scaricare qualche libreria per programmare questo programma?
Ti server una libreria per effettuare connessioni HTTP e un parser XML. Due grandi classici multipiattaforma sono libcurl (http://curl.haxx.se/libcurl/) (qui (http://code.google.com/p/curlpp/) il binding C++) e Xerces-C++ (http://xerces.apache.org/xerces-c/); in alternativa, Windows già include le funzioni di urlmon e il parser MSXML. Le librerie per scaricare il file sono entrambe relativamente semplici da usare, i parser XML un po' meno (specie perché devi prima imparare cos'è un file XML, cos'è un parser DOM, come estrarre dall'albero DOM i dati che ti interessano & co.), MSXML poi può essere particolarmente ostico perché è basato su COM (tecnologia piuttosto incasinata da usare).

In alternativa, puoi usare una libreria già pronta come FeedReader (http://code.google.com/p/feed-reader-lib/), che se noti richiede per funzionare le stesse librerie citate sopra (tra le altre).


6 Sapresti dove posso trovare una guida che spieghi come utilizzare le funzioni che permettono al programma di interagire col forum? (Preferirei che le guide fossero in italiano, ma se proprio non le trovassi anche se sono in inglese mi vanno bene).

Dubito ci sia alcunché del genere, non so quanti forum forniscano delle API, e in ogni caso saranno API specifiche del tal forum e "language agnostic" in stile webservice (per cui non hai delle funzioni C++ specifiche da chiamare, ma devi procurarti una libreria per fare richieste SOAP o quello che usano e "costruirti" una tua libreria C++).

Ma ribadisco, un programma in C++ mi pare la soluzione meno adatta a questo problema. Già di base basterebbe un normalissimo RSS reader per essere notificati di nuovi elementi in un feed RSS; poi se proprio vuoi scriverti un programma tuo, fare mestieri del genere in C++ è una complicazione inutile, questa è roba da linguaggi di scripting tipo Python, in cui hai già pronte all'uso librerie per collegarsi al server e parser XML (e l'uso di librerie per leggere feed è estremamente semplice (http://wiki.python.org/moin/RssLibraries)).

g.b99pm10
22-05-2013, 20:27
ti ringrazio molte, ti chiedo solo un'ultima cosa: secondo te con un vb riuscirei ad adempire il compito più facilmente? Se sì, con quale funzione? Ti ringrazio infinitamente

:ciauz:

MItaly
22-05-2013, 20:31
Si parla di VB6 o VB.NET? Nel caso di VB.NET, tutti i "mattoni" necessari sono già nel .NET Framework (System.Net.WebClient e System.Xml.XmlDocument), e di librerie .NET per il parsing di feed RSS ne trovi una marea con una semplice ricerca su Google (una delle prime che vedo (http://qdfeed.codeplex.com/)). Nel caso di VB6, si ricade sostanzialmente di nuovo su UrlMon e MSXML (qui forse leggermente più semplice da usare, dato che VB6 nasconde parte della complessità di COM).

Loading