PHP-File in VBScript umschreiben

  • VBScript

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von J.Herbrich.

    PHP-File in VBScript umschreiben

    Hallo zusammen,

    Ich habe eine Frage bezüglich PHP-File umschreiben in VBScript.
    Ich kenne mich leider nicht gut aus in PHP, und bin Anfänger in VBScript.

    Wir nutzen ein Webbasiertes Buchhaltungsprogramm, welches eine REST API zur Verfügung stellt, um Daten auszulesen.
    Die Example-Files sind in PHP geschrieben und zeigen mir die Resultate der abfrage im Browser.

    Nun würde ich aber das Ganze gerne in VBScript schreiben und wollte fragen, ob es überhaupt möglich ist eine PHP-File 1zu1 in VBScript zuschreiben?
    Es gibt Example-Files welches sich auf cURL oder OAuth 2.0 beziehen.

    Grüsse
    OVOXO
    Ahoi,

    eine PHP-Basierte Webanwendung in VBScript 1 zu 1 zu übertragen sollte nicht möglich sein, da PHP eine "komplexe" Sprache ist und VBScript halt eine Script-Sprache. Was du benötigst, wäre ASP oder besser noch ASP.NET. VBScript kannst du eher mit JavaScript vergleichen.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Hallo,

    Ich denke du solltest einfach eine Referenz zusammen suchen und dann 1 zu 1 in ASP.NET VB Übertragen. Visual Basic Scritpt wird zwar nicht in Web Verwendet (Server Seitig) aber Client Seitig können durchaus Visual Basic Scritpt Programme ausgeführt werden, doch so weit ich weiß macht nur der IE Sowas.

    Desweiteren würde ich PHP ehr nach C# ersetzen weil beide srachen eine gewisse C Basis haben. In ASP.NET Kannst du sonst auch Visual Basic Scripte definieren (Inline Coode) aber du wirst dann den runat="server" atribute tag setzen müssen.

    Altanativ wen es QaD (Quick and Dirty) sein soll dann kannst du auch in <% %> inline coode Tags schreiben, besser währe es aber natürlich auch dann wen man sich einfach darum kümmern würde dass alles in aspx.vb datein untergebracht wird da diese Datein einfcher zu bedinenen sind und so UI und Source sauber getrennt sind.

    LG, J.Herbrich
    Danke für deine Antwort.

    Das Problem ist, dass mir die PHP-Lösung die Daten als eine Seite darstellt.
    Mein Ziel ist es, die erhaltenen Daten in Variablen zu speichern, diese dann auszuwerten und in eine DB speichern.
    Diese Auswertung muss täglich passieren, daher dachte ich VBScript ist die richtige Lösung.
    Hallo,

    Kannst du nicht einfachach eine Windows Anwendung mit VB.NET machen die dann wiederum in die DB Schreibt.

    Ich eine wen dass so ist woher kommen die Daten? Wen du direkt auf die Datenquelle gehen kannst dann schreib den zugang in dein neues Programm und schreibe dann von diesen aus in die DB.

    Dass 1x Täglich kannst du endweder mit einen Cron Job (Weiß nicht mehr Wie es unter Windows heißt aber ich glaube die nenen es dort gelahnten Task.

    LG, J. Herbrich
    Danke für eure Antworten.

    Leider bin ich ein bisschen verwirrt, wie ich nun diese Aufgabe lösen soll.
    So wie es verstanden habe, ist ASP.NET die Lösung.
    Soweit ich sehe ist ASP.NET etwas ähnliches wie PHP nur von Microsoft.

    Daher weiss ich nicht ob dies die richtige Lösung ist.
    Da ich die Daten nur darstellen will, sondern in eine andere DB speichern.

    Die Daten werden im PHP-File via URL aufgerufen, welches sich im Code je nach Kriterien zusammenstellt.
    Die URL führt dann die eigentliche SQL-Abfrage auf einem Server aus und liefert mir die Daten zurück.
    Daher habe ich keinen Zugang zur DB.
    Wenn die Daten vom php-Server von der Datenbank geholt werden und Du keinen direkten Zugriff auf die Datenbank hast, nutzt Dir keine Script-Sprache was ohne den Webserver dazwischen. Also die Daten per VBScript vom Server holen und dann halt die zurückgegebene Seite entsprechend 'zu Fuss' parsen und so an die nötigen Daten kommen. Ändert sich irgedwann der Aufbau Serverseitig, dann muss auch Dein Script wieder angepasst werden. Es sei denn die Seite bieten noch eine API an.

    PHP wird auf dem Server, welcher den Datenbankzugriff hat, ausgeführt. VBScript auf dem Clienten ohne Datenbankzugriff. Somit nutzen Dir die PHP-Beispiele auf dem Clienten nichts. Anders sieht es aus, wenn Du z.B. per Netzwerk auch direkten Zugriff auf die DB und entsprechende Zugangsdaten hast. Dann kannst Du die Abfrage 'direkt' im Script ausführen.

    Je mehr Details Du bekannt gibst, um so bessere Antworten können wir liefern. Evtl. hilft es schon nach dem geheimnisvollen Buchhaltungsprogramm zu googlen. Vielleicht gibt es auch ein Hersteller- / Communityforum dafür.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Naja ich frage mal anders.
    Dieser Code ist in PHP geschrieben.
    Wie ich es verstanden habe, kann ich den Code 1zu1 in ASP.NET schreiben und im ASP.NET-Code, VBScript einfliessen lassen.
    Der Grund warum ich VBScript nutzen will/muss ist, das die Daten welche mir die PHP-Files liefern über eine Schnittstelle in die Datenbank einer anderen Software.
    Die andere Software bietet eine API an, welche man mit VBScript ansprechen kann um die Daten zu überliefern.
    Die Schnittstelle welche in VBScript geschrieben wurde, steht bereits.
    Daher ist mein eigentliches Ziel, die erhaltenen Daten der VBScript-Schnittstelle zu überliefern.

    PHP-Quellcode

    1. <?php
    2. require_once dirname(__FILE__) . "/Curl.class.php";
    3. class OAuth2 {
    4. protected $client_id = null;
    5. protected $client_secret = null;
    6. public function __construct($client_id, $client_secret = null) {
    7. $this->client_id = $client_id;
    8. $this->client_secret = $client_secret;
    9. }
    10. public function getAuthenticationUrl($auth_endpoint, $redirect_uri, $state, $scopes) {
    11. $parameters = array(
    12. 'client_id' => $this->client_id,
    13. 'redirect_uri' => $redirect_uri,
    14. 'state' => $state,
    15. 'scope' => $scopes,
    16. );
    17. return $auth_endpoint . '?' . http_build_query($parameters, null, '&');
    18. }
    19. public function getAccessToken($token_url, $access_code, $redirect_uri) {
    20. $postFields = array('client_id' => $this->client_id,
    21. 'client_secret' => $this->client_secret,
    22. 'code' => $access_code,
    23. 'redirect_uri' => $redirect_uri
    24. );
    25. $curl = new Curl();
    26. $result = $curl->call($token_url, array(), $postFields, Curl::METHOD_POST);
    27. return json_decode($result, true);
    28. }
    29. }
    30. ?>
    Hallo,

    Nehe doch einfach den BizTalk Server oder die SQL-Tranformation Services, Wen du umbedingt selber machen willst. Das H Scrit nutzt curl weswegen ich davon ausgehe das es zwar Daten holt aber die DB nicht direkt ansricht.

    Ich würde also sagen du kannst dass Teil ohne Probleme in ASP.NET übersetzen, aber für dein Vorhaben ist eine CMD Anwendung mit Gelahnten Task besser geeignet.

    Die Überlegung ist einfach nur folgende, du hast eine ASP.NET Seite die immer in täglichen Intervallen aufgerufen werden muss damit du die Daten von einer DB in die andere Kriegst. ASP.NET ist aber darfür gedacht direkte Zugriffe (Mensch oder Maschine (API)) zu verarbeiten. ASP.NET Kann aber selbstständig nicht ausgeführt werden ohne einen Trigger Request zu erhallten der die Web Handler im IIS Anstößt.

    Zu deinen PHP-Script kann ich ebenfalls nur sagen dass du die Daten direkt abgreifen kannst, ich werde mir mal diese PHP genauer ansehen und wen ich lust habe schreibe ich dir den Coode wie du die Daten abfragen kannst. Wen nicht sage ich dir auf jednen Fall was zu tun ist.

    EDIT: Dass sieht mir nicht nach Datenbank aus sondern nach API zugriff (oauth), so wie ich es hier sehe versucht die eine sogenannte REST-API anzuzafen. Da werde ich den ganzen restlichen Coode brauchen um da durch zu steigen.

    Worum geht hier ist eigentlich denn, Facebook ist es nicht, Google vieleicht? Oder eine kleinere API, was Netzwerk Internes wohl ehr nicht, weil der Coode nach Internet Dienst einer großen Website aussieht.

    LG, J.Herbrich
    Hallo,

    Genau dass Predige ich ja immer, ich kann dir Persönlich Visual Basic nahe legen aber die CMD ist genau der Richtige Weg, du wählst in Visual Studio einfach Console Aplication aus und als Sprache VB,

    cUrl = WebClient
    json kannst du mit DatenVerträgen (System.Runtime.Serialisation verweisen und dann Data Contract (Datenvertrag) setzen.

    VB.NET-Quellcode

    1. Import System.Runtime.Serialisation
    2. Import System.Runtime.Serialisation.Json
    3. <DataContract()> _
    4. Public Class MyDataContract
    5. <datamember()> Public Propety MyDataMember as MyType
    6. ' MyType = {String,Integer,Boolean,Object,MyClassMustUseDataContract)
    7. end Class


    Und was die Functionen angeht denke ich nicht dass du da all zu viele Probleme bekommen solltest.

    LG, J.Herbrich
    Gutte Frage, dass ist er ein Persönliches ding, ich finde VB.NET Ordentlicher. Aber vb.net und C# sind dass selbe, denn beides wird auf CLR Übersetzt und würde Theoretisch sogar die exakt selbe exe Produzieren. Ich fide vb.net ist einfach einfacher (MyNamesace) die denn Zugriff auf Wesentliche Funktionen einfach vereinfcht.

    LG, J.Herbrich
    Geht auch problemlos mit VB Script.
    Beispiel für einen POST Request von einer anderen Webseite:

    Visual Basic-Quellcode

    1. 'URL to open....
    2. sUrl = "http://www.example.com/page.php"
    3. 'POST Request to send.
    4. sRequest = "varname=value&varname=value"
    5. HTTPPost sUrl, sRequest
    6. Function HTTPPost(sUrl, sRequest)
    7. set oHTTP = CreateObject("Microsoft.XMLHTTP")
    8. oHTTP.open "POST", sUrl,false
    9. oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    10. oHTTP.setRequestHeader "Content-Length", Len(sRequest)
    11. oHTTP.send sRequest
    12. HTTPPost = oHTTP.responseText
    13. End Function
    Das ist meine Signatur und sie wird wunderbar sein!
    Ich habe mich dafür entschieden, dass ganze als eine C# Konsolenanwendung zu programmieren.
    Da ich praktisch keine Erfahrung in C# habe, wäre ich sehr froh wenn mir jemand als Hilfe einen Code teil umgeschrieben zeigen könnte.
    Mir würde es schon reichen wenn ich ein Beispiel der ersten Funktion "call" hätte.

    PHP-Quellcode

    1. <?php
    2. class Curl {
    3. const METHOD_GET = 'GET';
    4. const METHOD_POST = 'POST';
    5. const METHOD_PUT = 'PUT';
    6. const METHOD_DELETE = 'DELETE';
    7. const CURL_TIMEOUT_IN_SECS = 15;
    8. public static $successFullHttpCodes = array(200, 201, 204);
    9. public function call($url, $urlParams = array(), $postParams = null, $method = self::METHOD_GET, $headers = array()) {
    10. $finalUrl = $url . $this->getUrlParameterString($urlParams);
    11. $data = $this->makeCurlCall($finalUrl, $postParams, $method, $headers);
    12. return $data;
    13. }
    14. /**
    15. * Creates a curl call for the given url, automatically validates the return value for errors.
    16. * If an error has been found a new Exception will be thrown.
    17. *
    18. * @param string $url
    19. * @param array $postParams Parameters for Post and Put-Requests
    20. * @param string $method HTTP-Method (GET, PUT, POST, DELETE)
    21. * @param string $headers HTTP-Headers
    22. * @throws Exception
    23. */
    24. private function makeCurlCall($url, $postParams = array(), $method = self::METHOD_GET, $headers = array()) {
    25. $curl = curl_init();
    26. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    27. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
    28. curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
    29. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    30. curl_setopt($curl, CURLOPT_URL, $url);
    31. curl_setopt($curl, CURLOPT_VERBOSE, 0);
    32. curl_setopt($curl, CURLOPT_TIMEOUT, self::CURL_TIMEOUT_IN_SECS);
    33. curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
    34. if ($headers) {
    35. $usableHeaders = array();
    36. foreach ($headers as $name => $value) {
    37. $usableHeaders[] = sprintf('%s: %s', $name, $value);
    38. }
    39. curl_setopt($curl, CURLOPT_HTTPHEADER, $usableHeaders);
    40. }
    41. if ($postParams) {
    42. curl_setopt($curl, CURLOPT_POSTFIELDS, $postParams);
    43. }
    44. $data = curl_exec($curl);
    45. $this->checkForError($curl, $data);
    46. return $data;
    47. }
    48. /**
    49. * Checks for any errors in the api response.
    50. * If an error has been found a new Exception will be thrown.
    51. *
    52. * @param string $data the resulting data
    53. * @throws Exception
    54. */
    55. private function checkForError($curl, $data) {
    56. $curlInfo = curl_getinfo($curl);
    57. if (isset($curlInfo['http_code']) && !in_array($curlInfo['http_code'], self::$successFullHttpCodes)) {
    58. throw new Exception($curlInfo['http_code'] ? $data : 'could not get a response from the service', $curlInfo['http_code'] ? $curlInfo['http_code'] : 500);
    59. }
    60. }
    61. /**
    62. * Builds a valid http query
    63. *
    64. * @param array $urlParams
    65. * @return string
    66. */
    67. private function getUrlParameterString(array $urlParams) {
    68. if (!$urlParams) {
    69. return "";
    70. }
    71. return "?" . http_build_query($urlParams);
    72. }
    73. }
    74. ?>
    Hallo,

    Du kannst diese Klasse einfach in VB.NET mit WebClient ersetzen da ist wesentlich mehr drinnen als in dieser Classe aber dieAltanative währe HTT nach zu bauen. Das cUrl defakto der WebClient in vb.net ist.

    LG, J.Herbrich