Jump to content
Sign in to follow this  
jvc1986

Sende SMS skript?

Recommended Posts

30 kr måneden? Altfor dyrt :D Selv har jge laget et script som sender sms via http://1890.no/. Her kan man dog ikke redigere innhold, men man trenger ingen login, og det fungerer fint hvis man bare skal ha en slags varsling for noe.

Og legge ut skriptet her? :D

 

Men fungerer skriptene for ung1881 enda? :)

Share this post


Link to post

Har tenkt til aa ta en titt paa dette scriptet igjen naar jeg kommer tilbake fra ferie paa onsdag, og rette opp eventuelle feil og mangler.. Noen funksjonsoensker til da?

Hadde ogsaa tenkt aa lage et script som kan sjekke etter nye mail paa en IMAP server, for saa aa sende en SMS med info om nye mailer til et gitt mobilnummer. Er dette av interesse for noen andre enn meg?

 

Jonhoo

Share this post


Link to post

Hvis du kunne gjort det Jonhoo så hadde det vært supert... akkuratt det jeg trenger til bedrift's siden! :D

 

EDIT: E-post delen, og at det funker :p

Edited by Famen

Share this post


Link to post

Da var det gjort...

Scriptet email2SMS.php må ligge i samme mappe som imapX.php og sendSMS.php, og så setter du bare opp en planlagt oppgave (Windows) eller crontab (Linux) som skal kjøre så ofte du vil at den skal sjekke...

 

Det vanlige scriptet fungerer nå som det skal, og man kan også sende meldinger lengre enn 127 tegn (De vil da ble delt opp over flere meldinger, med reklame i hver melding.

 

Enjoy!

 

(Kom gjerne med tilbakemeldinger =) )

Jonhoo

SendSMS.zip

Share this post


Link to post

Hvis noen trenger et script som er spesiallaget (Type email2sms eller luresms eller 1890 eller 1980 eller ja), bare si i fra, jeg kan helt sikkert kode noe, hvis noe er av interesse :)

Share this post


Link to post

De har visst endra litt på sidene sine ja, man må blant annet bekrefte SMSen før den sendes nå.

Jeg har ikke så voldsomt peiling på curl, men har nå prøvd meg litt frem og er NESTEN i mål!

 

Jeg kommer så langt som til siden man skal bekrefte meldingen, men får bare 500-feilmelding etter det.

Noen andre som er bedre på curl enn meg som ser hva som er feil? :)

 

 

<?php

/*
$meldingssentral = new SMS($bruker, $passord)
- Kobler til ung1881

$meldingssentral->sendSMS($til, $melding)
- Sender en SMS

$meldingssentral->sisteLoggmelding()
- Henter ut siste loggmelding
Alle loggmeldinger er lagret i en array slik:
Array( 
	'msg' => 
	'error' =>
	'time' =>
)

$meldingssentral->hentSessionLogg()
- Henter ut alle loggmeldinger for objektet

//Sett opp DB tilkobling før du prøver funksjonene under!
$meldingssentral->settDbConn($dbconn, $tabellnavn)

//Pass også på at det er satt opp en tiktig tabell
$meldingssentral->createTable($dbconn, $tabellnavn)
- Prøver å lage en tabell med riktige innstillinger
- Dersom en allerede finnes vil tilkobling bli opprettet med en gang,
	du taper ikke noe hastighet på å kjøre denne funksjonen for hver gang
	så lenge du kjører den istedenfor settDbConn

$logg = $meldingssentral->hentLogg($måned = false, $år = false);
- Gir deg en liste med meldinger sendt, mottakere, datoer etc fra en database...
- Kan hente ut meldinger kun fra en gitt måned (dette året hvis ikke noe år oppgitt)
- Kan hente ut meldinger fra et gitt år
- Hvis ingen parametere er gitt returnerer den alle loggoppføringer

-- OBS: Denne funksjonen lagrer automatisk loggen fra denne sessionen

$meldingssentral->oppdaterLogg()
- Lagrer nåværende logg til databasen
- Passer på at det ikke blir noen duplikater
*/

class SMSsender {
private $bruker;
private $passord;
private $cookiefil;
private $curl_session;
private $finished_url;
private $isAuthed = false;

private $logger = array();
private $fulllogger = array();
private $dbconn = false;
private $loggtable = '';

function __construct($bruker, $passord, $cookie = '', $connect = true)
{
	$this->bruker = $bruker;
	$this->passord = $passord;
	$this->cookiefil = ($cookie == '' ? 'cookie-sms.'.time().'.txt' : $cookie);

	$this->curl_session = curl_init();

	if ($connect)
		if (!$this->auth())
		{
			trigger_error('Kunne ikke logge på ung1881.no!', E_USER_WARNING);
			return false;
		}
}

public function connect()
{
	if (!$this->auth())
	{
		trigger_error('Kunne ikke logge på ung1881.no!', E_USER_WARNING);
		return false;
	}
}

private function log($msg, $error, $tid = 0)
{
	array_push($this->logger, array('error' => ($error?1:0), 'msg' => $msg, 'time' => (!$tid?time():$tid)));
}

private function auth()
{
	//Skaff nødvendige variabler før posting
	curl_setopt($this->curl_session, CURLOPT_URL, "http://www.1881.no/ung1881/Default.aspx");
	curl_setopt($this->curl_session, CURLOPT_RETURNTRANSFER, 1);
	$frontpage = curl_exec($this->curl_session);
	$tokens = array();
		//Hent inn hidden validation fields
		preg_match('/ id="__VIEWSTATE" value="([^"]+)"/', $frontpage, $tokens['viewstate']);
	$tokens['viewstate'] = $tokens['viewstate'][1];


	//Send post for logginn
	curl_setopt($this->curl_session, CURLOPT_URL, "http://www.1881.no/ung1881/Default.aspx");
	curl_setopt($this->curl_session, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($this->curl_session, CURLOPT_POST, 1);
		$post =  '__VIEWSTATE='.urlencode($tokens['viewstate']);
		$post .= '&ctl00$ucSearchBar$txtUserName='.$this->bruker;
		$post .= '&ctl00$ucSearchBar$txtPassword='.$this->passord;
		$post .= '&ctl00$ucSearchBar$btnLogIn.x=1&ctl00$ucSearchBar$btnLogIn.y=1';
	curl_setopt($this->curl_session, CURLOPT_POSTFIELDS, $post);
	curl_setopt($this->curl_session, CURLOPT_COOKIEJAR, $this->cookiefil);
	curl_setopt($this->curl_session, CURLOPT_COOKIEFILE, $this->cookiefil);
	curl_setopt($this->curl_session, CURLOPT_FOLLOWLOCATION, 1);
	$memberpage = curl_exec($this->curl_session);

	//Sjekk at logginn var vellykket, hvis ikke skriv til logg
	if (!strpos($memberpage, '<fieldset class="innlogget">'))
	{
		$this->log('Kunne ikke logge inn bruker '.$this->bruker, true);
		return false;
	}

	//Lagre vellykket innlogging
	$this->log('Brukeren '.$this->bruker.' logget inn', false);
	$this->isAuthed = true;
	return true;
}

private function toUTF8Selective($string)
{
	return mb_convert_encoding($string, "UTF-8", mb_detect_encoding($string, "auto"));
}

public function sendSMS($nummer, $melding)
{
	if (!$this->isAuthed)
	{
		$this->log('Du kan ikke sende meldinger hvis du ikke er logget inn!', true);
		return false;
	}

	if (strlen($melding) > 127)
	{
		$this->log('En melding til '.$nummer.' ble delt opp i flere SMSer!', false);
		$chars = 0;
		$worked = true;
		while ($chars < strlen($melding))
		{
			if (!$this->sendSMS($nummer, substr($melding, $chars, 127)))
				$worked = false;
			$chars += 127;
		}
		return $worked;
	}

	//Henter send SMS form
	curl_setopt($this->curl_session, CURLOPT_URL, "http://www.1881.no/Ung1881/SMS/Send-SMS/");
	curl_setopt($this->curl_session, CURLOPT_RETURNTRANSFER, 1);
	$sendSMSpage = curl_exec($this->curl_session);
		//Hent inn hidden validation fields igjen
		preg_match('/ id="__VIEWSTATE" value="([^"]+)"/', $sendSMSpage, $tokens['viewstate']);
	$tokens['viewstate'] = $tokens['viewstate'][1];

	//Så poster vi meldingen
	curl_setopt($this->curl_session, CURLOPT_URL, "http://www.1881.no/Ung1881/SMS/Send-SMS/Post.aspx");
	curl_setopt($this->curl_session, CURLOPT_COOKIEJAR, $this->cookiefil);
	curl_setopt($this->curl_session, CURLOPT_COOKIEFILE, $this->cookiefil);
	curl_setopt($this->curl_session, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($this->curl_session, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($this->curl_session, CURLOPT_POST, 1);
		$post =  '__VIEWSTATE='.urlencode($tokens['viewstate']);
		$post .= '&ctl00$MainContent$PageContentMain$txtReciever='.$nummer;
		$post .= '&ctl00$MainContent$PageContentMain$txtSmsText='.$this->toUTF8Selective($melding); 
		$post .= '&ctl00$MainContent$PageContentMain$btnNextSms.x=1&ctl00$MainContent$PageContentMain$btnNextSms.y=1';
	curl_setopt($this->curl_session, CURLOPT_POSTFIELDS, $post);
	$sendMsg = curl_exec($this->curl_session);


/*echo "<pre>";
var_dump(curl_getinfo($this->curl_session));
echo "</pre>";*/
//var_dump($sendMsg);


	//Så bekrefter vi meldingen
	curl_setopt($this->curl_session, CURLOPT_URL, "http://www.1881.no/Ung1881/SMS/Send-SMS/Post.aspx");
	curl_setopt($this->curl_session, CURLOPT_COOKIEJAR, $this->cookiefil);
	curl_setopt($this->curl_session, CURLOPT_COOKIEFILE, $this->cookiefil);
	curl_setopt($this->curl_session, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($this->curl_session, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($this->curl_session, CURLOPT_POST, 1);
		$post =  '__VIEWSTATE='.urlencode($tokens['viewstate']);
		$post .= '&ctl00$MainContent$PageContentMain$btnSendSms.x=1&ctl00$MainContent$PageContentMain$btnSendSms.y=1';
	curl_setopt($this->curl_session, CURLOPT_POSTFIELDS, $post);
	$sendMsg = curl_exec($this->curl_session);


//var_dump($sendMsg);

	//Sjekk at meldingen ble sendt
	preg_match('/<span id="_ctl0_MainContent_PageContentMain_lblError" class="error">([^\"]+)<\/span>/is', $sendMsg, $smsstatus);
	if (strpos($sendMsg, "<script>fade_in('smsSendt')</script>") === false)
	{
		$this->log('En meldingssending feilet for bruker '.$this->bruker.' med status: '.$smsstatus[1], true);
		return false;
	}

	$this->log('En melding ble sendt fra brukerkontoen '.$this->bruker.' til nummer: '.$nummer, false);
	return true;
}

public function sisteLoggmelding()
{
	return (empty($this->logger)?false:$this->logger[count($this->logger)]);
}

public function settDbConn($db, $tabell, $surpress = false)
{
	if (!mysql_query("SELECT * FROM $tabell WHERE melding = '' AND tid = 0 AND error = 0 AND uniqhash = ''", $db))
	{
		if (!$surpress)
			trigger_error("Den oppgitte kombinasjonen av databasetilkobling og tabell er ikke gyldig!", E_USER_WARNING);
		return false;
	}
	$this->dbconn = $db;
	$this->loggtable = $tabell;
	return true;
}

public function hentLogg($m = false, $y = false)
{
	$this->oppdaterLogg();
	if (!$this->dbconn)
	{
		trigger_error("Kunne ikke hente ut logg fra databasen, ingen tilkobling satt", E_USER_WARNING);
		return false;
	}

	$sql = "SELECT * FROM {$this->loggtable}";

	if ($m !== false && $y !== false)
	{
		$sql .= " WHERE tid > ".mktime(0, 0, 0, (int)$m, 1, $y)." AND tid < ".mktime(23, 59, 59, ((int)$m+1), 0, $y);
	}
	elseif ($m !== false)
	{
		$sql .= " WHERE tid > ".mktime(0, 0, 0, (int)$m, 1, date("Y"))." AND tid < ".mktime(23, 59, 59, ((int)$m+1), 0,  date("Y"));
	}
	elseif ($y !== false)
	{
		$sql .= " WHERE tid > ".mktime(0, 0, 0, 1, 1, $y)." AND tid < ".mktime(23, 59, 59, 12, 31,  $y);
	}

	$sql .= " ORDER BY tid ASC";

	$allLogEntries = mysql_query($sql, $this->dbconn);

	if(!$allLogEntries)
	{
		$this->log('DB Error: '.mysql_error().' ved bruk av følgende query "'.$sql.'"', 1, time());
	}

	$this->logger = array();
	while ($entry = mysql_fetch_array($allLogEntries))
	{
		$this->log($entry['melding'], $entry['error'], $entry['tid']);
	}

	return $this->logger;
}

public function hentSessionLogg()
{
	return $this->logger;
}

public function oppdaterLogg()
{
	if (!$this->dbconn)
	{
		trigger_error("Kunne ikke oppdatere databasen, ingen tilkobling satt", E_USER_WARNING);
		return false;
	}

	for ($i = 0; $i < count($this->logger); $i++)
	{
		mysql_query("INSERT IGNORE INTO {$this->loggtable} (melding, error, tid, uniqhash) VALUES ('".
			mysql_real_escape_string($this->logger[$i]['msg'])."', '".
			($this->logger[$i]['error']?1:0)."', '".
			$this->logger[$i]['time']."', '".
			sha1($this->logger[$i]['msg'].($this->logger[$i]['error']?1:0).$this->logger[$i]['time']).
			"')", $this->dbconn);
	}
}

public function createTable($db, $tblnme)
{
	if ($this->settDbConn($db, $tblnme, true))
	{
		return true;
	}

	$create =<<<EOF
CREATE TABLE $tblnme (
meldingsid INT UNSIGNED AUTO_INCREMENT,
melding TEXT,
tid INT UNSIGNED,
error TINYINT(1),
uniqhash TEXT,
PRIMARY KEY(meldingsid),
UNIQUE uniqhash (uniqhash(40))
)
EOF;
	$c = mysql_query($create, $db);
	if ($c)
	{
		$this->dbconn = $db;
		$this->loggtable = $tblnme;
		return true;
	}
	else
	{
		trigger_error("Kunne ikke opprette tabell!\n".mysql_error(), E_USER_WARNING);
		return false;
	}
}

function __destruct()
{
	curl_close($this->curl_session);
}
};

?>

 

Share this post


Link to post

For de som vil lage 2 veis SMS, så er tingen http://www.gammu.org/wiki/index.php?title=Main_Page Kjører i deamon med Mysql. Bare å koble opp en gammel mobil telefon, med f.eks fri familie, så kan man komunisere med maskinen over php. Krever så klart at man har serveren selv. kjører selv med gammelt option HSDPA kort... funker fett. legger bare inn meldinger i en tabell i databasen, også forsvinner de ut! samme med inngående.

Share this post


Link to post

Hei,

 

I og med at siste versjon av ung1881-scriptet ikke funker lenger, lurer jeg på om noen har klart å gjøre de endringer som trengs for å få den til å virke igjen? Det hadde vært VELDIG gledelig om det gikk an å få tak i dette "nye" scriptet! Har en online webkalender hvor utsending av sms vil være veldig viktig funksjon.

 

* Er det event. alternative sms-leverandører & script, som fungerer vs. norske mobilnumre?

* Hvis "ung1881"-scriptet kan tilpasses og brukes. Dette hadde vært veldig, veldig greit å få til:

Vanligvis, når mottaker får sms-meldingen - så står mitt mobilnr. som avsender. Er det mulig å få til at det står noe annet som "avsender-nr" - som f.eks. "Fra nettsiden"?

I firmaet jeg jobber i, har vi et eget "sms-program" (skrevet i Delphi) - hvor man kan få til nettopp dette... men her benytter vi en annen sms-leverandør (CoolSMS i Danmark).

 

-Takker for svar :yes:

Edited by koda95

Share this post


Link to post
* Er det event. alternative sms-leverandører & script, som fungerer vs. norske mobilnumre?

Finnes mange ulike leverandører av SMS-tjenester der ute. SMS-utsendelse er jo tross alt noe som fler og fler benytter, og som har vært temmelig populært i en lengre tid. Du kan jo f.eks. vurdere KeySMS fra arbeidsplassen min.

Share this post


Link to post
Finnes mange ulike leverandører av SMS-tjenester der ute. SMS-utsendelse er jo tross alt noe som fler og fler benytter, og som har vært temmelig populært i en lengre tid. Du kan jo f.eks. vurdere KeySMS fra arbeidsplassen min.

 

Hmm... det blir nok altfor dyrt for mitt vedkommende... Dette er tjenester tilpasset firmaer/bedrifter med langt større behov (i ant. sms'er) - og tykkere lommebok ;) enn meg...

 

For mitt vedkommende vil det aldri bli mer enn maks. 20-30 stk. sms i måneden..

Share this post


Link to post

For de av dere som fortsatt er interessert i dette så har jeg nå skrevet en klasse som lar deg bruke PHP som en nettleser ( trykke på lenker, submitte forms, etc.. ). Dette vil antageligvis gjøre det ganske mye lettere å ordne dette.. Har ikke tid til å skrive et nytt sendSMS script, men med hjelp av denne klassen så burde det være en veldig smal sak.

 

Klassen ligger på PHP Classes: http://www.phpclasses.org/browse/package/5450.html

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...